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

C语言动态扩容矩阵所有位置仅存储最后一个输入值是什么原因?

问题产生原因
  • 核心逻辑错误为字符串赋值方式不对:你在main函数的输入循环中使用matrix[words] = tmp_word;属于指针直接赋值操作,并非将输入的单词内容复制到矩阵对应的内存空间。tmp_word是栈上申请的固定长度字符数组,所有matrix数组的元素最终都指向同一块tmp_word的内存地址,每次新输入的单词都会覆盖tmp_word中原有的存储内容,因此读取矩阵所有位置得到的都是最后一次输入的结果。
  • 额外存在的不规范编码隐患:在create_matrix、matrix_reallocation函数中为单个字符串分配内存时,错误使用了sizeof(char*)作为单位,正确单位应该是sizeof(char),不过因为C标准中char类型默认占1字节,该问题暂时不会触发明显运行错误,但属于不规范写法。
修复方法

只需将输入循环中的指针赋值改为字符串内容拷贝即可,同时可以给fscanf增加长度限制避免输入溢出:

while (fscanf(stdin,"%1024s",tmp_word) != EOF){
    // 把tmp_word中的内容复制到预先分配好的matrix[words]内存空间
    strcpy(matrix[words], tmp_word);
    words++;
    printf("Words stored: %d, Capacity: %d\n", words, cap);
    if (words == cap){
        printf("Limit reached, reallocating....\n");
        matrix = matrix_reallocation(matrix, &cap);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:05