realloc 设置所有索引相同的数据
Realloc sets all indexes the same data
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 应该可以在几秒钟内告诉您这一点。如果你不明白你只是在分配指针,那么你需要回到你的教科书或讲义。
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 应该可以在几秒钟内告诉您这一点。如果你不明白你只是在分配指针,那么你需要回到你的教科书或讲义。