gpt4 book ai didi

c - 当我尝试浏览文件时,它会覆盖我要保存到的数组吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:09 24 4
gpt4 key购买 nike

    char * names[10];
int i = 0;
char theRow[20];

while (fgets(theRow, 80 , fp) != NULL) {
names[i] = theRow;
i++;
}

我尝试保存到的数组的输出完全相同,具体取决于最后一个元素。

例如。文件有 (hi, I , 2, 3, karl)
然后数组变为 (karl,karl,karl,karl,karl)

我是不是错过了什么或者可能是什么?

最佳答案

使用 names[i] = nameRow;,您一次又一次地存储相同的指针(指向相同的内存块),但是对于您读取的每一行,您都会覆盖 contents 如果这 block 内存。

您需要将读入的内容复制到缓冲区 nameRow 中,然后在循环的下一次迭代中覆盖它。

names[i] = strdup(nameRow);

函数 strdup 做两件事,(1) 它保留足够大的内存来保存 nameRow 的副本(使用 malloc),以及(2) 然后复制内容。

这也表明您必须释放稍后复制的每个条目。

而且,尽管被广泛采用,strdup 并不是标准 C 的一部分;所以为了独立于平台,你必须写...

names[i] = malloc(strlen(nameRow)+1);
strcpy(names[i],nameRow);

关于c - 当我尝试浏览文件时,它会覆盖我要保存到的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089860/

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