我编写的 getword 函数接受基于 getchar() 的缓冲输入。它也由元字符分隔。每次调用后,它都会将指针移动到输入的缓冲区字符串中的下一个单词,并将最新的单词放入它作为参数的 char 指针中,在本例中,它是称为 buffer 的字符数组。
目标:使用我编写的 getword 函数,我需要将每个返回的单词/标记存储到我设置的 char*args[] 的连续索引中。
我的问题是我无法正确地将这些单独的标记加载到我的 char *args[] 的单独索引中。相反,它似乎在 for 循环的每次传递后将最新的单词存储到 args 的所有索引中。例如,如果我输入:
Hello world, this is a test.
它将以这种方式将单词存储到 args 中:
- pass1:
args[0]:你好
- pass2:
args[0]:世界,
args[1]:世界,
- pass3:
args[0]:这个
args[1]:这个
args[2]:这个
代码:
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++;
}
}
}
最佳答案
尝试改变
args[i] = buffer;
至
args[i] = strdup(buffer);
看看会发生什么。研究 strdup() 的作用。
关于c - 为什么我的 tokenize 循环无法正确填充 char-array-pointers 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026270/