c - 为什么这个编译没有错误?

标签 c strcpy

我完全是 C 语言的菜鸟,我需要一些帮助来理解为什么某段代码可以正确编译。

main(){
    char name[3];
    strcpy(name, "12345678912312");
    printf("%s\n",name);
}

所以这段代码编译正确;但是,我不明白为什么它不会导致段错误。根据我对c的理解,每个字符都是1个字节。数组名称应该能够容纳 3 个字节,但实际上它可以容纳更多。这是为什么?

此外,如果我再添加一个字符,我将得到 Illegal Instruction(core dumped)。

main(){
    char name[3];
    strcpy(name, "123456789123121");
    printf("%s\n",name);
}

然后,如果我向该代码添加另一个字符,它将抛出一个段错误(核心转储)错误。为什么错误不同?为什么以前没有发生过?

最后,我在哪里可以找到每个函数的文档?我来自 Java,所以我习惯于引用 Java 文档。

我在 Ubuntu linux 中使用 GCC 编译器。

最佳答案

这两个代码都会调用未定义的行为,因为您正在写入未分配的内存位置。在这种情况下,任何事情都可能发生。您的程序运行后可能会或可能不会提供预期的输出,否则它会崩溃或出现段错误。
另请注意,strcpy 不会检查数组绑定(bind),编译器也不会为此引发任何警告/错误。

关于c - 为什么这个编译没有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317888/

相关文章:

c++ - 使用CanFestival的CanOpen同时进行多个药膏

c - 预处理器

C Programming::accept() 在压力测试中工作然后不工作

c - openMP 线程和迭代

C 指向覆盖最后保存的指针的指针

c - 为什么我的键盘记录器不起作用?

c - 尝试将 strcpy() 用于 2D 字符数组时出现段错误?

c++ - strcpy_s 不适用于 gcc

c - 我不明白为什么会收到 "Segmentation fault (core dumped)"错误

c - strcpy() 上的段错误;