c - 为什么我的 tokenize 循环无法正确填充 char-array-pointers 数组

标签 c

我编写的 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/

相关文章:

c - 在 Dev-cpp 中将数组放入头文件

c - 输出是什么?请解释一下,考虑到我是c新手

c++ - 在其他计算机上导入 RSA key 时出现问题

c - 在C中执行以下操作的方法是什么?

c - C语言中使用循环反转字符串

c - 使用 gcc 编译一个显示 "undefined reference to ` 中止的项目'”

c - C 语言中遵从运算符与空格的放置效果

c - GTK窗口作为桌面背景,如何降低堆叠顺序

c - 扫描文本文件时如何跳过一行?

c++ - <函数> 引用自;找不到符号