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个索引。
有人可以帮帮我吗?
答案 0 :(得分:2)
变量lines
基本上是一个指针数组。并且数组中的所有指针都指向同一个nextline
数组的第一个元素。
作业
lines[counter] = nextline;
仅分配指针,它不会执行深层复制或复制当前nextline
中的字符串。
您可能希望使用strdup
函数而不只是分配指针:
lines[counter] = strdup(nextline);
请记住free
以后的strdup
字符串。
如果你知道数组和指针如何相互作用,一个简单的rubber duck debugging应该在几秒钟内告诉你。如果你不明白你只是指定指针,那么你需要回到你的教科书或讲义。