2013-12-13 15 views
-1

我正在向文件寫入字符串。但是隻有字符串的第一部分才被插入到文件中。其他人失蹤。例如:如果我寫「我喜歡花」,「我」只寫入文件。使用獲取功能讀取字符時出錯

#include <stdio.h> 
int main() 
{ 
     char string[50]; 
     int marks,i,n; 
     FILE *fptr; fptr=(fopen("string.txt","w")); 
     if(fptr==NULL){ 
       printf("Error!"); 
       return 0; 
     } 
     printf("Enter a string : \n"); 
     scanf("%s", string); 
     //fprintf(fptr,"%s",string); 
     fwrite(string, 1, sizeof(string), fptr); 

     fclose(fptr); 
     return 0; 
} 
+0

'fwrite()'正常工作 – qrdl

+1

爲什麼這是downvoted?如果您可以在Downvoting之前指定一個原因,這將會很有幫助。 – Vaquita

+1

程序員不應該假設標準庫存在問題,問題始終在於您編寫的代碼。那麼,有一個小小的,幾乎不存在的stdlib錯誤的機會,但你必須有500%的把握,在確定之前這不是你的錯。 – qrdl

回答

6

scanf()將停止在第一個空間讀取:這就是問題所在。 scanf("%s")僅從標準輸入讀取I。要讀取整個行,請改用fgets()。使用strlen()只寫入讀取內容,而不是使用sizeof(string)

+0

謝謝。但是在添加fgets之後,程序只是在我輸入任何字符串之前退出。這是正確的語法嗎? printf(「輸入一個字符串:\ n」); fgets(string,100,fptr); – Vaquita

+0

'fgets(string,sizeof(string),stdin);':note'stdin'。 _總是檢查返回值以確保函數成功。 – hmjd

+0

再次錯誤。分段錯誤:11.現在程序是這樣的:fgets(string,sizeof(string),stdin); fwrite(string,sizeof(string),strlen(string),fptr); FCLOSE(FPTR); – Vaquita

1

在您的代碼scanf("%s",string)只會將字符串取到第一個空格。要讀取的總字符串「我喜歡花」,你必須使用scanf功能是這樣的:

scanf("%[^\n]s,string); 

它會奏效。