gpt4 book ai didi

c - 当我尝试追加时,字符串数组被完全重写 - C (xv6)

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:16 28 4
gpt4 key购买 nike

我通过使用声明一个字符串数组:

char *commands[100];

然后我继续进入一个 while 循环来读取用户输入的命令:

    while(getcmd(buf, sizeof(buf), cmd_count) >= 0){

printf(2, "cmd_count: %d\n", cmd_count);
buf[strlen(buf)-1] = 0;
printf(2, "string buf: -%s-\n", buf);
commands[cmd_count] = buf;
printf(2, "commands: %s\n", commands[0]);
printf(2, "commands: %s\n", commands[1]);
printf(2, "commands: %s\n", commands[2]);
printf(2, "commands: %s\n", commands[3]);
cmd_count++;
}

这是两次迭代的输出:

0 EZ$ ls
cmd_count: 0
string buf: -ls-
commands: ls
commands: (null)
commands: (null)
commands: (null)

EZ$ echo hello
cmd_count: 1
string buf: -echo hello-
commands: echo hello
commands: echo hello
commands: (null)
commands: (null)

尽管 cmd_count 在第二次迭代中显然为 1,但它重写了第 0 位和第 1 位。给了什么?

最佳答案

不知道你的整个算法,一个简单的方法可能是:

  • 目前,您已分配变量 command 以容纳 100 个字符指针,这样您就有空间处理 cmd_count 0 - 99。

  • 但是您只有一个缓冲区来存储每个命令

  • 如果您确实需要将每个命令存储在读取它们的 while 循环之后,那么以下方法如何:

为命令中的每个指针分配一个足以容纳命令的缓冲区

for (int i = 0; i < 100; i++) {
commands[i] = malloc(MAXSTRINGSIZE + 1);
}

(您可以通过分配 ((MAXSTRINGSIZE + 1) * 100) 然后将命令中的每个指针设置为正确的偏移量来优化它,但是如果您只是学习指针,上述方法可能更容易理解)

  • 然后尝试用 commands[i] 替换 getcmd() 调用中的 buf,这样您就可以将命令直接读入命令数组的条目中。

关于c - 当我尝试追加时,字符串数组被完全重写 - C (xv6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48493580/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com