2014-09-20 77 views
1

當我正在處理字符串。我有這樣的事情:什麼是先加' n'或' 0'

#include <stdio.h> 
#define MAXLINE 1000 

main(){ 
int c; 
int i=0; 
char s[MAXLINE]; 

while(c=(getchar()) !=EOF) 
{ 
s[i] = c; 
++i; 
} 
} 

我想問一下後,我喜歡寫東西HELLO然後打enter打破行所做的「\ n」首先增加了字符流或空終止字符,即「後\ 0'

視覺哪一個是發生了什麼事的正確表示: (1)HELLO \ n \ 0 OR (2)HELLO \ 0 \ n

+3

請在發佈之前縮進並編譯您的代碼。 – 2014-09-20 16:00:20

+1

我想你想'while((c = getchar())!= EOF)'。你有什麼不會做你認爲它做的。 – Ferruccio 2014-09-20 16:04:59

+1

@堆棧溢出32:你的代碼中沒有任何東西可以在任何地方添加任何'\ 0'字符。所以最後一個問題的答案是:既不是,也沒有發生過這樣的事情。 – AnT 2014-09-20 17:10:28

回答

1

你編寫代碼的方式,有沒有NUL字符添加到s

由於您一次只讀輸入的一個字符,如果您想s爲NUL終止,您需要自行添加NUL。

+0

好吧,如果添加它然後什麼我自己然後呢?說s [我] ='\ 0'。然後,'\ n'會先被添加,否則字符串將首先在輸入時終止以打破該行 – 2014-09-20 16:09:56

0

重要的是EOF不等於換行符。循環將僅終止於EOF即Ctrl + D(在linux中)。它不會在按下Enter鍵時終止。

getchar()是從標準輸入中讀取字符的函數。 EOF是C中使用的特殊字符,表示已達到文件結束。

的getchar的返回值()是:

1.On成功,字符讀返回(晉升爲int值)。
2.返回類型爲int以適應特殊值EOF,這表示失敗:
3.如果標準輸入位於文件結尾,則函數返回EOF並設置eof指示符(feof)的stdin。
4.如果發生其他讀取錯誤,該函數也會返回EOF,但會設置其錯誤指示符(ferror)。

因此,每個換行符將存儲在String中,而不是終止循環。它不會在最後添加任何NULL字符,所以不會有NULL字符。相反,它可以是你好\ n(其中'\ n'將在系統中存儲爲0x0A)