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

int main()
{
    char s1[] = "harry";
    char s2[] = "ravi";
    char s3[54];

    puts(strcat(s1, s2));
    
    strcpy(s3 ,strcat(s1, s2));
    puts(s3);
    
    return 0;
} 
  

这是我会得到的错误

cd "/Users/deepkar/Desktop/C_COURSE/" && gcc tut27.c -o tut27 && "/Users/deepkar/Desktop/C_COURSE/"tut27
deepkar@Deeps-Air C_COURSE % cd "/Users/deepkar/Desktop/C_COURSE/" && gcc tut27.c -o tut27 && "/Users/deepkar/Desktop/C_COURSE/"tut27
zsh: illegal hardware instruction  "/Users/deepkar/Desktop/C_COURSE/"tut27
deepkar@Deeps-Air C_COURSE % 
4

1 回答 1

0

问题来自您的代码具有未定义的行为:

您调用strcat(s1, s2);了两次,试图从s2指向的数组末尾复制字符s1,但s1已经包含一个字符串,该字符串"harry"连同其空终止符一起完全填充了数组,定义char s1[] = "harry";为它的长度为 6 个字节。 strcat写入超出数组末尾s1,覆盖重要数据,例如函数的返回地址main。观察到的行为与 CPU 分支到无效地址一致。

s1您可以改为复制s3s2连接到它。

于 2022-01-01T14:35:35.243 回答