[英]“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.