gpt4 book ai didi

c - 在 C 中将字符串存储在 char 数组中——我做错了什么?

转载 作者:行者123 更新时间:2023-11-30 19:51:50 25 4
gpt4 key购买 nike

我正在从 getline() 检索字符串,如下所示:

length = getline(&line, &linecap, stdin);

该字符串包含空格。

然后我将这一行插入到数组中:

char *history[10];
history[0]=line;

然后我从数组中打印该条目的内容:

printf("\nHISTORY[%d] = %s", 0, (history[0]));

问题是只有第一个单词会打印到屏幕上。看起来只有第一个单词实际存储在数组中。

例如,如果 line =“这是一条很棒的线”。然后,我将这一行插入历史数组中,但只有单词“This”从我的 printf 中打印出来。

我做错了什么?

最佳答案

您不能写入history[0] = line。您需要使用strcpy:

strcpy(history[0], line)

第一个参数是目标,第二个参数是源。但是,您没有为 history 中的任何元素分配空间。它们只是不指向有效区域的指针。您可以通过以下方式解决此问题

for (i = 0; i < 10; ++i)
history[i] = malloc(strlen(line) + 1);

现在您可以复制到history[i]中。

完成后,必须释放内存

for (i = 0; i < 10; ++i)
free(history[i]);

但是strcpy的问题是,如果目标中没有足够的空间,就会发生缓冲区溢出。要解决此问题,请重写 strcpy 以接受长度。

void mystrcpy(char *dest, char *src, size_t n)
{
size_t i;
for (i = 0; i < n && *dest++ = *src++; ++i)
;
dest[i] = 0;
}

上述函数仅将前 n 个字符从 src 复制到 dest。这是一个进步。

关于c - 在 C 中将字符串存储在 char 数组中——我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303992/

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