我有一个字符串"1|4|1577|1|10.22.33|7001390280000019|||||172.20.5.20|1",我想将这个字符串分割并得到以下结果:
1
4
1577
10.22.33
7001390280000019
null
null
null
null
172.20.5.20
1
然而,当我在while循环中使用strtok时,没有任何内容的管道不会显示,因此我的结果如下:
1
4
1577
1
10.22.33
7001390280000019
172.20.5.20
1
我该如何获得这个结果?
以下是我的代码:
int main(argc,argv)
int argc;
char *argv[];
{
char *var1="1|4|1577|1|10.22.33|7001390280000019|||||172.20.5.20|1";
char *var2=malloc(strlen(var1)+1);
strcpy(var2,var1);
while ((var2 = strtok(var2, "|")) != NULL){
printf("<<%s>>\n", var2);
var2= NULL;
}
return 0;
}
提前感谢您
strtok
是正确的函数(实际上并不是),使用var2
也是相当错误的。首先,malloc
应该是char *var2=malloc(strlen(var1)+1);
,但你随后又将var2=NULL
覆盖,导致它无法被free
。更好的方法是var2=strdup(var1)
,但你仍然需要free(var2)
。 - Weather Vanestrsep()
手册(http://www.unix.com/man-page/osx/3/strsep/)似乎有一个例子可以解决你正在做的事情 :) - mahstrsep
,可以使用示例实现,或者通过谷歌搜索代码。 - BLUEPIXY