我正在学习用 c 语言编程,但遇到了一些奇怪的事情。
我在摆弄 char 数组/字符串并使用不同的函数。所以我有这个程序,
#include <stdio.h>
int main(){
char a[] = {'H','e','y','a','\0'};
strcat(a,"bro!");
printf(a);
}
$ gcc -o test.o test.c -Wall
$ ./test.o
Heya bro!
$
按预期工作,但如果我添加
#include <string.h>
从头开始,然后我明白了
$ gcc -o test.o test.c -Wall
$ ./test.o
Abort: trap 6
$
最佳答案
strcat
尝试追加字符,但数组的大小再次不足以容纳它们,给您 undefined behavior .(在你的情况下,未定义的行为会导致你看到的错误 - 它可能是一切都有效的情况。)因为 strcat
试图写超出数组 a
. printf
的第一个参数应该是格式说明符,如 printf("%s",a);
。
char a[] = {'H','e','y','a','\0'};
这里 a
有 5 个元素。数组的大小为 5
。您需要采用更大的阵列。
char a[9] = {'H','e','y','a','\0'};
如果您让数组容纳 9 个字符,那么它就可以工作。
关于c - #include <string.h> -> 中止陷阱 : 6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820749/