C 数组元素全部变为相同值

问题描述 投票:0回答:1

我正在尝试使用输入文件填充名称数组,但是数组的元素最终都变成相同的值,我不确定为什么。

    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。

arrays c file-io pass-by-reference pass-by-value
1个回答
0
投票

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));
© www.soinside.com 2019 - 2024. All rights reserved.