我正在使用一个接受全名作为输入并按顺序打印出来的函数:名字、中间名、姓氏。
问题是我的while循环似乎是无限的,我还没有找到解决方法。
以下是我的功能:
void order(char ar[])
{
int i, count=0, a=1;
char* token;
char last[20], middle[20], first[20],c;
char s[]=" ";
for(i=0;i<strlen(ar)-1;i++)
if(ar[i]==' ') count++;
token=strtok(ar,s);
strcpy(last,token);
while(token!=NULL)
{
token=strtok(NULL,s);
if(a<count) strcpy(middle,token);
else strcpy(first,token);
a++;
}
printf("%s %s %s",first,middle,last);
}
最佳答案
当复制第一个时(即识别所有令牌),将再次输入while循环(注意,令牌不为空,但在本例中指向第一个)。现在将调用strtok()并返回NULL。代码将转到else部分并尝试strcpy(),这是导致问题的原因。
在strcpy()之前检查是否为空。我这样做过,效果很好。
while(token!=NULL)
{
token=strtok(NULL,s);
if (token == NULL)
break;
if(a<count) strcpy(middle,token);
else strcpy(first,token);
a++;
}
关于c - C-不能在strtok中使用strcpy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50940484/