我正在使用一个接受全名作为输入并按顺序打印出来的函数:名字、中间名、姓氏。
问题是我的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/

10-11 18:45