2012-09-03 72 views
1

看一看這段代碼C++:在文本文件中存儲char數組時,Null是否被存儲?

ofstream obj("output.txt"); 
obj<<"Hello World"; 

在這裏,我發送到文本文件「output.txt中」的字符數組的「Hello World」

現在字符數組是必須在年底終止空他們。

所以,當我發送字符數組到文本文件「output.txt」,終止null是否被髮送和存儲以及爲什麼?

+0

您可以使用十六進制編輯器輕鬆檢查此問題。 – Indy9000

回答

6

考慮,如果你寫了幾次的文件會發生什麼:

ofstream output("myfile.txt"); 
output << "Hello"; 
output << " "; 
output << "world"; 

如果一個字符串結束在每次你寫的東西到文件中,當你寫的第二次系統將不得不時間增加在文件中找到零,刪除它,然後在新文本之後再次添加它。而且,系統必須以不同的方式實現輸出到例如控制檯。

所以回答你的問題:不,終止符不寫。它只被內存中的字符串用於函數,以知道字符串在內存中的位置。

+0

要添加,如果使用output.write(),則取決於您如何調用它,如果需要,可以寫入null。 –

+0

@RobertMason如果字符串不是文字,而是'std :: string',它們也可以包含nul個字符。 –

+0

@RobertMason當然,但是這是_you_誰決定寫它而不是底層系統。 –

2

不可以。空終止正是C/C++用來知道字符串結束的地方。

請注意,如果讓它在您真正想要的字符後面寫入一個0x​​00字節,將會非常令人討厭地失去控制。然後,只寫出你想要的字符會有點麻煩。

+0

如果用「C/C++」表示「處理零終止字符串的函數」。 –

+0

@MikeSeymour我想我的意思是說C標準是如何定義一個字符串的,儘管你肯定是對的,它只與處理它們的函數有關。在C++中,這不會像在C中那樣普遍。 – David