我试图使用输入文件填充一个名称数组,但数组中的元素最终都变成了相同的值,我不确定为什么。
char* names[name_count]; for (int i = 0; i < name_count; i++) { names[i] = fgets(buffer, MAX_LINE_LENGTH, input_fp); for (int j = 0; j <= i; j++) { puts(names[j]); } }
输入文件的第一行指定有多少个名称,赋值指定我们不需要使用动态分配的内存,所以我使用的是一个可变大小的数组。
如果我有5个名字,最后一个是Ed,那么for循环结束时的结果将是我的数组将Ed存储在所有位置,而不是最后一个位置的Ed和它之前的其他名字。
fgets() function 返回 buffer 通过。
fgets()
buffer
您正在重复使用 缓冲器 ,因此元素被设置为相同的指针,并且内容被重写。
缓冲器
你应该 复制字符串 以保留内容。
使用中的函数 stdlib.h ( malloc 和 string.h ( strcpy ):
stdlib.h
malloc
string.h
strcpy
fgets(buffer, MAX_LINE_LENGTH, input_fp); names[j] = malloc(strlen(buffer) + 1); /* +1 for the terminating null character */ if (names[j] == NULL) exit(99); /* check for allocation failure */ strcpy(names[j], buffer);
或者在中使用POSIX函数(不在C23之前的C标准中) 一串h :
一串h
names[i] = strdup(fgets(buffer, MAX_LINE_LENGTH, input_fp));