我写的getword函数接受基于getchar()的缓冲输入。它也通过元字符划分。每次调用后,它会将指针移动到输入缓冲区字符串中的下一个字,并将最新的指针放在它作为参数的char指针中,在这种情况下,它是名为buffer的字符数组。
目标:使用我写的getword函数,我需要将每个返回的单词/标记存储到我设置的char * args []的连续索引中。
我的问题是我无法将这些单独的令牌正确加载到我的char * args []的单独索引中。相反,它似乎在for循环的每次传递之后将最新的单词存储到args的所有索引中。例如,如果我输入:
Hello world, this is a test.
它会以这种方式将单词存储到args中:
args[0]: Hello
args[0]: world,
args[1]: world,
args[0]: this
args[1]: this
args[2]: this
代码:
int main (int argc, char *argv[]) {
char buffer[MAXBUF], *args[MAXITEM];
int c = 1;
for (i = 0; c > 0; i++) {
c = getword(buffer);
args[i] = buffer;
int g = 0;
while(args[g] != NULL) {
printf("args[%d]: %s\n", g, args[g]);
g++;
}
}
}
答案 0 :(得分:1)
尝试更改
args[i] = buffer;
到
args[i] = strdup(buffer);
看看会发生什么。研究strdup()的作用。