You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言字符串数组元素全部变为同一值的问题求助

问题:字符串数组所有元素被覆盖为同一个值

尝试从输入文件中填充字符串数组names,但最终数组所有元素都变为同一个值。输入文件首行指定名称的数量,任务要求无需使用动态分配内存,因此使用了变长数组(variable-sized array)。若有5个名称且最后一个为Ed,循环结束后数组的所有位置都会存储Ed,而非仅最后一位存储Ed、其余位置为之前的名称。

相关代码如下:

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]);
    }
}

问题根源

  • names是指针数组,每个元素都是char*类型,你每次都把fgets返回的buffer指针赋值给names[i]。
  • buffer是一块固定的内存区域,每次调用fgets都会用新读取的内容覆盖这块内存。数组里的所有指针最终都指向同一块内存,所以最后所有元素显示的都是最后一次读取的内容。

解决方案

改用二维变长数组,让每个名称都存储在独立的内存空间中,避免被后续读取操作覆盖:

// 二维变长数组,每个元素对应一个名称的存储区域
char names[name_count][MAX_LINE_LENGTH];

for (int i = 0; i < name_count; i++) {
    // 直接读取到当前索引对应的内存块
    fgets(names[i], MAX_LINE_LENGTH, input_fp);
    for (int j = 0; j <= i; j++) {
        puts(names[j]);
    }
}

内容的提问来源于stack exchange,提问作者Grekys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:22:07