我有下面的代码。
#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我似乎无法使用任何与相关的方法。我在网上查过了,但什么都没发现,有什么想法吗?
发布于 2021-10-08 20:12:41
char first[] = "foo";它告诉编译器创建一个大小正好适合初始化字符串的数组。它没有任何空间可以添加更多的字符。因此,试图用strcat将字符串添加到末尾会导致缓冲区溢出,从而导致未定义的行为。
一个解决方案是显式地调整数组的大小:
#define MAX_SIZE 32
char foo[MAX_SIZE] = "foo";https://stackoverflow.com/questions/69501206
复制相似问题