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
相关产品推荐
相关产品推荐

