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

C语言调用strcat拼接字符串触发zsh: illegal hardware instruction错误原因

代码错误原因

  • strcat 函数要求第一个入参(目标字符串)的内存空间必须足够容纳拼接后的完整字符串(包括末尾的\0结束符),该函数不会自动为目标字符串申请额外内存。
  • 你的代码中 char str1[] = "sandeep"; 是根据字符串字面量长度自动分配内存,"sandeep" 共7个可见字符,加末尾隐藏的\0结束符,str1实际仅分配了8字节的内存空间。
  • 拼接str2的sahani(共7字节,含\0)时,需要的总存储空间为 7(str1可见字符)+6(str2可见字符)+1(结束符)=14字节,远大于str1的8字节容量,触发栈缓冲区溢出。
  • 溢出的内容会覆盖栈上保存的函数返回地址等关键数据,程序执行到main函数返回阶段时,CPU会尝试跳转到被篡改的非法地址执行指令,最终抛出illegal hardware instruction错误。

修复方法

手动给目标字符串str1分配足够大的内存空间即可,修改后的参考代码如下:

#include <stdio.h>
#include <string.h>

int main()
{
    // 手动指定数组长度,需保证长度 ≥ 原字符串长度 + 待拼接字符串长度 + 1(结束符占位)
    char str1[20] = "sandeep";
    char str2[] = "sahani";
    strcat(str1, str2);
    printf("%s %s", str1, str2);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:09:03