gpt4 book ai didi

c - realloc 设置所有索引相同的数据

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

FILE *fd;
char **lines = NULL;

int err = fopen_s(&fd, filename, "r");

if (err != 0) {
printf("Nao foi possivel abrir o ficheiro %s ...\n", filename);
return;
}

char nextline[1024];
int counter = 0;

while (fgets(nextline, sizeof(nextline), fd)) {
if (strlen(nextline) < 1) {
continue;
}

lines = (char**)realloc(lines, (counter+1) * sizeof(*lines));
lines[counter] = nextline;



counter++;
}

fclose(fd);
*numElements = counter;

//IN HERE IT SHOWS ME THE SAME FOR ALL THE PLAYERS FROM 300 DIFFERENT PLAYERS WHY IS THAT???
printf_s("\n\n%s\n", lines[299]);
printf_s("%s\n", lines[298]);

我想不通这个问题。
首先 realloc 删除旧缓冲区,现在它实际上是将相同的数据复制到所有 300 个索引。

有人可以帮帮我吗?

最佳答案

变量 lines 基本上是一个指针数组。数组中的所有指针都指向同一个 nextline 数组的第一个元素。

作业

lines[counter] = nextline;

仅分配指针,它不会执行深度复制或复制当前在nextline 中的字符串。

你可能想使用 strdup 函数而不是仅仅分配指针:

lines[counter] = strdup(nextline);

请记住 free 您稍后strdup 的字符串。

如果您知道数组和指针如何交互,一个简单的 rubber duck debugging应该在几秒钟内告诉你这个。如果你不明白你只是在分配指针,那么你需要回到你的教科书或讲义。

关于c - realloc 设置所有索引相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50079671/

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