字符串分割处理:strtok实战

strtok

char *strtok(char *str, const char *delim);

  • str: 要分词的字符串。在首次调用时,此参数应指向欲分解的字符串。在后续的调用中,为了获取其他的标记,这个参数应当为 NULL。
  • delim: 分隔符
  • 返回值:
    -如果找到delim,则返回指向该标记的指针。
    如果没有找到delin, 则返回原字符串
    如果传入的字符串为空串,如 char str[] = {0} ; // char str[] = “” , 则返回NULL
    如果第一次传入str值不为空,后续使用str为空,当str为空串的时候,返回NULL

实例

字符串1:“sip:172.16.30.34:5060”
字符串2:“sip:111172.16.30.34:5060”
字符串1 返回正确,字符串2 返回错误
判断sip:之后为ip地址,则返回正确; 若sip:之后有号码111, 之后为ip地址,则返回错 。

注意

  1. strcpy 正确拷贝,目的字符串要使用字符数组,不能使用未初始化的指针或者空指针
  2. strtok 分割字符后成功后,源字符串(第一个参数)发生改变,为分割之后的字符串,若之后再次执行strtok函数,如果需要保存,则进行拷贝
#include <stdio.h>
#include <string.h>
int main()
{
	char string[50] = "sip:172.16.30.34:5060";
	char *tmp;
	char *ip_addr = NULL;
	char ip_addrBack[32] = "";  
	//char *ip_addrBack;  // core dump 的原因 , ip_addrBack的指针未知,不知道是否可写, 要么手动申请空间,要么使用字符数组
	char *ip_first = NULL;
    tmp = strtok(string, ":"); 
	if(tmp != NULL)
	{
		ip_addr = strtok(NULL, ":");
		if(ip_addr != NULL)
		{
			strncpy(ip_addrBack,ip_addr,sizeof(ip_addrBack)-1);
			ip_addrBack[sizeof(ip_addrBack) - 1] = '\0';
			ip_first = strtok(ip_addr, ".");
			if(ip_first != NULL)
			{
				if(strlen(ip_first) == 3)
				{
					printf("success\n");
					return 1;
				}
			}
		}
	}
	else
	{
		printf("error\n");
		return -1;
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八月的雨季997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值