1
我正在嘗試使用scanf()
函數在C
中讀取該段落。 所以,首先我想下面的代碼,爲什麼在使用指針變量時出現段錯誤?
#include <stdio.h>
int main()
{
char Input[100];
printf("Please give the paragraph\n");
scanf("%[^EOF]\n",Input);
printf("\n\n%s\n\n",Input);
return 1;
}
它的正常工作,它從stdin
獲取輸入的段落並打印。 後來我試着用指針一樣的東西像下面給出
#include <stdio.h>
int main()
{
char *Input;
printf("Please give the paragraph\n");
scanf("%[^EOF]\n",Input);
printf("\n\n%s\n\n",Input);
return 1;
}
此代碼還可以獲得輸入和正確打印輸出。 但它拋出segmentation fault error while the program terminating.
所以,我需要知道爲什麼終止時發生錯誤?
如果指針沒有指向任何內存方式,printf()
如何打印給定的輸入以及打印位置?
謝謝。
因爲指針是未經初始化的。它包含垃圾,所以你告訴'scanf'寫入垃圾位置。事實上,它輸出「正確」並不意味着一切都很好。這只是意味着你很幸運......這次。它可能會產生錯誤的結果以及隨時崩潰。這被稱爲未定義的行爲。 – kaylum
這不是印刷問題;這是閱讀。你不知道數據放在哪裏,因爲指針指向不確定的空間 - 你必須分配空間。當你使用一個數組時,你提供了空間。當你使用未初始化的指針時,你不會。 –
'scanf(「%[^ EOF] \ n」,Input)' - 我建議閱讀scanf的文檔而不是猜測 –