繁体   English   中英

错误:C 中的“zsh:非法硬件指令”

[英]Error: 'zsh: illegal hardware instruction' in C

我正在学习string.h头文件并编写了一个简单的程序来连接两个字符串。

简单的C程序

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

int main()
{
   
    char str1[] = "sandeep";
    char str2[] = "sahani";
    strcat(str1, str2);
    printf("%s %s", str1, str2);

    return 0;
}

收到一条错误消息:

"/Users/sandeepsahani/Desktop/Sandeep Sahani/Basic Programming/ C programming/Basic Programs/DS/"stringConcat zsh: 非法硬件指令

我的代码有什么问题?

这里有几个问题:

  1. 用静态数据初始化的 char 数组应该被视为只读的,而不是更新的。 您不能只在它的末尾添加更多字符。 它可能会工作,也可能会产生错误。 未定义的行为。
  2. 你必须为目标字符串分配足够的内存来保存所有的连接。
int main()
{
       
    char str1[] = "sandeep";
    char str2[] = "sahani";
    char str3[100] = {0};
    
    strcat(str3, str1);
    strcat(str3, str2);    
    printf("%s %s  %s", str1, str2,str3);

    return 0;
}

如果您不指定数组的大小,则该大小刚好足以容纳它的初始化值。 所以str1只有 8 个字符(7 个字符加上空终止符)。 这没有足够的空间来添加sandeep

如果要连接到它,则需要它为附加字符串留出空间。 由于str2是 6 个字符, str1至少需要 14 个字符。 所以将其更改为:

char str1[14] = "sandeep";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM