在 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);
应该没问题。
我是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);
应该没问题。