使用 <string.h> 方法而不是 运行 的简单 C 程序

Simple C program using <string.h> methods not running

我有以下代码。

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

int main()
{
    char first[] = "foo";
    char last[] = "bar";
    
    strcat(first, last);
    
    printf("%s\n", first);

    return 0;
}

它编译但是当我运行它我得到以下错误:

zsh: illegal hardware instruction ./output/strfunc.out

作为参考,我正在使用 clang 编译代码:

Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

我似乎无法使用与 相关的任何方法。我在网上查了一下,但一无所获,有什么想法吗?

char first[] = "foo";

这告诉编译器创建一个大小正好适合初始化字符串的数组。它没有 space 可以添加更多字符。因此,尝试将带有 strcat 的字符串添加到末尾会导致缓冲区溢出,从而导致未定义的行为。

一个解决方案是明确调整数组的大小:

#define MAX_SIZE 32
char foo[MAX_SIZE] = "foo";