【发布时间】:2016-02-28 22:43:20
【问题描述】:
所以对于我的问题,如果有人键入了某些内容,我会对其进行解析并将其存储到字符数组中。我用空格分隔用户键入的任何内容。然后我将这些标记存储到 char 数组中并打印出来。但是由于某种原因,在打印了第一个单词之后,一些乱码被打印出来了。 这是我的代码:
#include <stdio.h>
#include <string.h>
#define MAXLINE 80
int main(void) {
char *args[MAXLINE / 2 + 1];
char buf[MAXLINE / 2 + 1];
scanf("%s", buf);
int i;
char *token;
token = strtok(buf, " ");
while (token != NULL) {
args[i++] = token;
token = strtok(NULL, " ");
}
//to print the array
for (i = 0; i < strlen(*args); i++) {
printf("%s\n" args[i]);
}
return 0;
}
【问题讨论】:
-
请正确布局您的代码。您至少缺少一个
}。此外,您在使用之前从未将i初始化为零,所以这可能是您的问题。最好将您的实际编译代码复制并粘贴到此处,而不是再次尝试输入它。没有名为buf的变量。您显然声明了一个名为but。 -
您需要在第一次 strtok() 调用之后有 buf+=(token+1)。 +1 会将您带到分隔空间的右侧。
-
@ArifBurhan 不,您不必这样做,因为不再使用
buf。 -
strlen(*args)给出第一个字符串的长度。这显然不是你想要的。相反,此时i已经包含存储在args中的有效条目数,应该用作该循环的最大迭代次数。 -
@ArifBurhan 你不能有
buf+=(token+1),因为buf是一个数组,这个表达式会产生编译错误。