我正在尝试使用输入文件填充名称数组,但是数组的元素最终都变成相同的值,我不确定为什么。
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()
函数返回传递的buffer
。
您正在重复使用
buffer
,因此元素将设置为相同的指针并且内容将被覆盖。
您应该复制字符串以保留内容。
使用
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);
或者在
string.h
中使用 POSIX 函数:
names[i] = strdup(fgets(buffer, MAX_LINE_LENGTH, input_fp));