我開始學習中C.輸入字符串在下面的源代碼我得到長度5.使用scanf的輸入字符串()
#include<stdio.h>
int main(void)
{
char s1[5];
printf("enter text:\n");
scanf("%s",s1);
printf("\n%s\n",s1);
return 0;
}
的字符數組當輸入爲:
1234567891234567
,我檢查了它的工作正常多達16個元素(我不明白,因爲它超過5個元素)。12345678912345678
,它給我一個錯誤segmentation fault: 11
(我給在這種情況下,17種元素)123456789123456789
,錯誤被Illegal instruction: 4
(我給在這種情況下,18種元素)
我不明白爲什麼有不同的錯誤。這是C中的scanf()
或字符數組的行爲。我正在閱讀的這本書對這些事情沒有一個明確的解釋。僅供參考我不瞭解指針。任何進一步的解釋都會很有幫助。
的行爲*不確定*當輸入的長度超過4個字符。 *未定義的行爲*並不意味着「必須立即崩潰」,這意味着語言沒有義務做任何特別的事情。 – EOF
但是當輸入超過5個字符時它不應該給我一個錯誤? – yash
@buggenerator:這不是違反約束條件,編譯器沒有義務發出診斷消息,也沒有要求在運行時引發錯誤。 – EOF