2016-10-15 60 views
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()如何打印給定的輸入以及打印位置?

謝謝。

+2

因爲指針是未經初始化的。它包含垃圾,所以你告訴'scanf'寫入垃圾位置。事實上,它輸出「正確」並不意味着一切都很好。這只是意味着你很幸運......這次。它可能會產生錯誤的結果以及隨時崩潰。這被稱爲未定義的行爲。 – kaylum

+0

這不是印刷問題;這是閱讀。你不知道數據放在哪裏,因爲指針指向不確定的空間 - 你必須分配空間。當你使用一個數組時,你提供了空間。當你使用未初始化的指針時,你不會。 –

+0

'scanf(「%[^ EOF] \ n」,Input)' - 我建議閱讀scanf的文檔而不是猜測 –

回答

0

由於Input是一個指向沒有特別的東西,並沒有特別的價值,將其值傳遞給scanf是沒有意義的。首先爲它指定一個值 - 使它指向某個東西 - 然後您可以使用它來告訴scanf存儲事物的位置。

相關問題