在 C 中 - 使用 strtok 期间出现 While 循环退出问题

In C - While Loop Exit issue during usage of strtok

我尝试使用 strtok 拆分字符串并在 2D 中存储单个单词 array.I 已放置 printf 语句并检查是否存储了单个单词并看到单词正在存储。 但问题是 while 循环根本不会终止,执行它时不会打印退出语句“Hi”。 我在这里找不到错误。 有人可以帮我解决这个问题吗?

int wordBreak(char* str, char words[MAX_WORDS][MAX_WORD_LENGTH])
{
    int x=0;
    const char  *delimiters = " :,;\n";
    char* token = strtok(str,delimiters);
    strcpy(words[x],token);
    x++;
    while(token!=NULL) {
        token = strtok(NULL,delimiters);
        strcpy(words[x],token);
        x++;
    }
    printf("Hi\n");
    return x;
}

在调用 strcpy 复制到您的数组之前,您必须始终确保 strtok 的 return 不是 NULL。一个简单的重新排列将确保情况如此:

int wordBreak (char* str, char words[MAX_WORDS][MAX_WORD_LENGTH])
{
    int x = 0;
    const char *delimiters = " :,;\n";
    char *token = strtok (str,delimiters);
    
    while (x < MAX_WORDS && token != NULL) {
        if (strlen (token) < MAX_WORD_LENGTH) {
            strcpy (words[x++], token);
            token = strtok (NULL, delimiters);
        }
        else
            fprintf (stderr, "warning: token '%s' exeeded MAX_WORD_LENGTH - skipped\n",
                     token);
    }
    
    return x;
}

您还必须确保 x < MAX_WORDS 通过添加如上所示的附加条件和测试以确保 strlen(token) < MAX_WORD_LENGTH 在复制到您的阵列之前。