如何使用strtok剪切大小不同的字符串?令牌长度问题

时间:2019-04-01 08:19:19

标签: c string strtok

因此,我对C还是一个新手,我得到了像这样的字符串a:name:number:number:number:number:name:name,并且我正在使用strtok来获取所有没有":"的名称和数字。关键是,字符串的大小可以变化,并且最多可以有两个名称(总是在结尾),例如:a:name:number:number:number:number:name:name:namea:name:number:number:number:number:name:name:name:name.

现在,我正在使用结构和strcpy()来获取结构中的每个名称,但是由于最后名称数量的可能变化,姓的长度总是比名称长1。它应该是。例如,输入将为a:john:123:12345:45677:12:james bond:darth vader,而strlen(a.name3)(darth vader)将为12。这是对于只有2个名字结尾的情况。最后的4个名称是名称的最大数量(最小为1),我不知道为什么会这样。

这是我的代码:

char *token,*token1,*token2;
structname a;
token = strtok(c,":"); //c is the input string
strcpy(a.name1,strtok(NULL,":"));
a.number1 = atoi(strtok(NULL,":"));
a.number2 = atoi(strtok(NULL,":"));
a.number3 = atoi(strtok(NULL,":"));
a.number4 = atoi(strtok(NULL,":"));
strcpy(a.name2,strtok(NULL,":"));
strcpy(a.name3,strtok(NULL,":"));
if ((token = strtok(NULL,":")) != NULL){
strcpy(a.name4,token1);
if ((token = strtok(NULL,":")) != NULL)
strcpy(a.name5,token2);}

我将使用姓氏的strlen(),它总是比其应有的数字大。谢谢!

0 个答案:

没有答案