为什么我的tokenize循环没有正确填充char-array-pointers数组

时间:2013-11-17 01:57:20

标签: c

我写的getword函数接受基于getchar()的缓冲输入。它也通过元字符划分。每次调用后,它会将指针移动到输入缓冲区字符串中的下一个字,并将最新的指针放在它作为参数的char指针中,在这种情况下,它是名为buffer的字符数组。

目标:使用我写的getword函数,我需要将每个返回的单词/标记存储到我设置的char * args []的连续索引中。

我的问题是我无法将这些单独的令牌正确加载到我的char * args []的单独索引中。相反,它似乎在for循环的每次传递之后将最新的单词存储到args的所有索引中。例如,如果我输入:

Hello world, this is a test.

它会以这种方式将单词存储到args中:

  • pass1:args[0]: Hello
  • pass2:args[0]: world, args[1]: world,
  • pass3: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++;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试更改

    args[i] = buffer;

    args[i] = strdup(buffer);

看看会发生什么。研究strdup()的作用。