2014-03-19 33 views
0

我寫了一個簡單的函數來讀取一個文本文檔,並將其原樣打印出來。但是我在輸出中看到了一些尾部\ n。我無法找出原因。尾隨 n當我使用fgetc

void read_file(FILE* fp , char* s) 
{ 
    int i=0; 
    char c; 
    while((c=fgetc(fp)) !=EOF) 
    { 
    s[i]=c; 
    //fseek(fp,1,SEEK_CUR); 
    i++; 
    } 
    printf("%d is length of file\n",i); 
    s[i]='\0'; 

    printf("%s",s); 
} 

我的文本文件包含

這裏

+0

你不想包含換行符? – BLUEPIXY

回答

0

首先:你需要聲明cintfgetc的返回值爲int,因爲char通常不足以容納EOF

在輸出結尾處出現換行符的原因是由於c不是int或者因爲您的輸入文件包含尾隨換行符。

+0

怎麼能'c'不是一個'int'帳戶呢? – ajay

+0

因爲行爲是不確定的,我想對衝我的答案。實際的結果可能是它要麼停止從文件讀取,如果它包含一個值爲-1的字節,或者它會寫入一大堆值爲255的字節,直到它耗盡磁盤空間。 –

+0

我只想知道爲什麼它是一個未定義的行爲。如果'char'類型被實現爲'signed char',那麼'c'可以保存'EOF'的值。如果'char'類型被實現爲'unsigned char',那麼它將是一個無符號整數溢出,這是定義的行爲。是否因爲在後一種情況下,'c'的值不會代表機器字符集中的任何字符? – ajay