簡體   English   中英

C中的“中止陷阱:6”錯誤?

[英]“Abort trap: 6” error in C?

我是C的初學者,但我在終端上通過gcc在xcode上運行此代碼:

#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;
}

它輸出這個:

My name is Roman Mirov
My name is Roman Mikov
hello Roman Mikov
Abort trap: 6

我的問題確切地說,為什么它產生錯誤而不是顯示最后一行作為輸出“問候,羅馬Mikov”?

在這種情況下,目標greeting沒有足夠的空間來包含的全部內容,因此它是一個超出范圍的訪問,它調用未定義的行為

詳細說明,數組greeting的大小由提供的初始化程序的大小決定,

char greeting[] = "hello";

在這種情況下, "hello"使大小為6,包括null終止符。

現在,稍后您嘗試將更大的字符串放入內存中,

strcpy(greeting, "greetings, ");

其中,源的大小為12字節,而目標只包含6.這會導致邊界溢出,結果為UB。 崩潰(或中止)是UB可能產生的副作用之一。

在這一行中,您將分配一個5 + 1個字符的數組:

char greeting[] = "hello";

在這一行中,您試圖在該數組中寫入11 + 1個字符:

strcpy(greeting, "greetings, ");

在這種情況下, greeting變量是char數組,大小為6(因為hello\\0 )。

所以當你使用strcpy(greeting, "greetings, "); "greetings, "復制成greeting是不可能的。 因為greeting不足以包含11+1字符的數組

=>錯誤abort trap : 6這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM