使用 <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";
我有以下代码。
#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";