首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中出现"Abort trap: 6“错误?

C中出现"Abort trap: 6“错误?
EN

Stack Overflow用户
提问于 2016-12-27 15:15:59
回答 3查看 33.5K关注 0票数 4

我是一个C语言的初学者,但我在终端上通过gcc在xcode上运行了以下代码:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h> 
int main(){
    char name[12] = "Roman Mirov"; 
    printf("My name is %s\n", name);
    name[8] = 'k'; 
    printf("My name is %s\n", name);
    char greeting[] = "hello"; 
    printf("%s %s\n", greeting, name);
    strcpy(greeting, "greetings, "); 
    printf("%s%s\n", greeting, name);
    return 0;
}

并输出以下内容:

代码语言:javascript
复制
My name is Roman Mirov
My name is Roman Mikov
hello Roman Mikov
Abort trap: 6

我的问题是,为什么它会生成错误,而不是将最后一行显示为输出"greetings,Roman Mikov"?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-27 15:18:53

在这种情况下,目标greeting没有足够的空间来包含源的全部内容,因此它是一个调用undefined behavior的越界访问。

更详细地说,数组greeting的大小由提供的初始化器的大小决定,

代码语言:javascript
复制
char greeting[] = "hello";

在本例中,"hello"使大小为6,包括空终止符。

现在,稍后您尝试将一个更大的字符串放入内存中,

代码语言:javascript
复制
strcpy(greeting, "greetings, ");

其中,源的大小为12个字节,而目标的大小仅为6个字节。这会导致边界溢出和结果UB。崩溃(或中止)是UB可能的副作用之一。

票数 10
EN

Stack Overflow用户

发布于 2016-12-27 15:22:23

在此行中,您将分配一个5+1字符数组:

代码语言:javascript
复制
char greeting[] = "hello";

在此行中,您尝试将11+1字符写入该数组:

代码语言:javascript
复制
strcpy(greeting, "greetings, ");
票数 0
EN

Stack Overflow用户

发布于 2016-12-27 15:32:49

在本例中,greeting变量是大小为6 char的数组(因为hello\0 )。

因此,当您使用strcpy(greeting, "greetings, ");"greetings, "复制到greeting中时是不能的。因为greeting不足以包含带有11+1字符的数组

=>在此处出现错误abort trap : 6

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41340717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档