代码之家  ›  专栏  ›  技术社区  ›  Grekys

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

  •  0
  • Grekys  · 技术社区  · 2 年前

    我试图使用输入文件填充一个名称数组,但数组中的元素最终都变成了相同的值,我不确定为什么。

        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和它之前的其他名字。

    1 回复  |  直到 2 年前
        1
  •  2
  •   MikeCAT    2 年前

    fgets() function 返回 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);
    
    

    或者在中使用POSIX函数(不在C23之前的C标准中) 一串h :

            names[i] = strdup(fgets(buffer, MAX_LINE_LENGTH, input_fp));