在 C 中解析字符串指针 - 疑难解答

Parsing string pointer in C - Troubleshoot

我是C新手

我试图通过 "spaces" 和 "commas" 解析字符串,*ch 指向的字符串,但我只得到第一个元素。不知道我做错了什么,我已经在这上面浪费了一整天了,但还是想不通。

#include <stdio.h>
#include <string.h>

int main(){
        char *ch = "This is a string, and fyunck you.";
        char cmd[100], *temp;
        int i = 0, size_ch = strlen(ch), count = 0;

        /* as strtok only support string array */
        for (i = 0; i < size_ch; i++){
                if (ch[i] != ','){
                        cmd[count] = ch[i];
                        count++;
                }
        }
        cmd[count] = '[=10=]';
        printf("cmd: %s\n", cmd);

        ch = strtok(cmd, " ");
        printf("ch: %s\n", ch);

        while ( (ch = strtok(NULL, " ")) != NULL)
                printf("%s\n", cmd);
}

Output

cmd: This is a string and fyunck you

ch: This

This

This

This

This

This

This

然而,输出应该是

Desire Output

cmd: This is a string and fyunck you

ch: This

is

a

string

and

fyunck

you

注意:我不允许使用外部库。

P.S 我正在尝试复制这段代码,Code

请注意:

while ((ch = strtok(NULL, " ")) != NULL)
    printf("%s\n", cmd);

您正在更新 ch,并输出 cmd,保持不变。

要解决此问题,只需将其更改为:

while ((ch = strtok(NULL, " ")) != NULL)
    printf("%s\n", ch);

您只是在最后一行打印了错误的变量。

改变

printf("%s\n", cmd);

printf("%s\n", ch);

应该没问题。