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

C语言构造二进制字符串存入数组后仅保留最后一个值的问题

问题根源
  • 你仅在循环执行前调用了1次malloc申请内存,所有binaryStringArray的元素都指向同一块内存地址currentBinaryString
  • 每次循环中修改currentBinaryString指向的内存内容时,实际是覆盖了所有数组元素共同指向的空间值,因此最终所有元素指向的内容都是最后一次构造的二进制串
  • 你观察到的「仅binaryStringArray[0]非空」是表象,本质是所有数组元素的指针值都和binaryStringArray[0]完全相同,指向同一块内存
修复方案

方案1:循环内申请独立内存

每次循环新申请一块独立内存存储当前构造的二进制串,后续使用完毕后需要逐个释放避免内存泄漏:

char *binaryStringArray[100];

for(int i = 0; i < n; i++) {
    char *currentBinaryString = malloc(33); // 移到循环内,每次申请新内存
    // 此处调用strcpy完成currentBinaryString的构造
    binaryStringArray[i] = currentBinaryString;
}

// 后续使用完后遍历释放内存
for(int i = 0; i < n; i++) {
    free(binaryStringArray[i]);
}

方案2:使用二维字符数组避免动态内存申请

如果你的n最大不超过100、二进制串长度不超过32,可以直接用栈上的二维数组,无需手动管理内存:

char binaryStringArray[100][33];
char tempStr[33];

for(int i = 0; i < n; i++) {
    // 此处构造二进制串存入tempStr
    strcpy(binaryStringArray[i], tempStr);
}
额外注意点

C语言字符串需要1字节存储结束符\0,如果你的二进制串最大长度为32个字符,建议申请33字节的内存,避免缓冲区越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:48:03