c - #include <string.h> -> 中止陷阱 : 6?

标签 c include string.h

我正在学习用 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/

相关文章:

c - 为什么*什么都不做*的 EXE 文件包含这么多虚拟零字节?

android - 在 Android Studio 0.5.1 上导入 Facebook SDK

c++ - 使用 strlen() 查找字符串数组的长度

c - 字符串打印额外值 C 编程

具有读取器只读访问权限的循环缓冲区

java - C 和 Java 中 PreIncrement 和 PostIncrement 运算符的行为

将 char 数组转换为 char 常量 (c)

c++ - 检查库是否存在

javascript - 在 Angular 6 上将 html 模板包含到另一个模板中

c - 即使在 C 中使用#include <string.h>,strlen 也不起作用