2010-10-20 140 views
1

NoobQuestion: 我聽說填充char數組可以用null char提前終止。這是如何完成的? 我已經搜索了每一個谷歌搜索結果,但仍然有空手。C++使用null部分填充數組

+0

你想用這個做什麼? – 2010-10-20 08:25:22

+1

對不起,但這是模糊地回答。 (爲什麼_filling_會提前終止,取決於數組中要讀取的內容來填充?)您可能想要改進該問題。現在我投票結束了。 – sbi 2010-10-20 08:31:56

回答

5

你的意思是這樣的:

char test[11] = "helloworld"; 
std::cout << test << std::endl; 
test[2] = 0; 
std::cout << test; 

此輸出

helloworld 
he 

+0

+1,@ user481407:還請注意,由於以空字符結尾的字符串,大小是helloworld + 1的大小。 – 2010-10-20 09:09:56

1

這是一個叫做「null終止字符串」的約定。如果你有一塊你認爲是字符緩衝區的內存塊,並且該緩衝區中有一個空字符,那麼以null結尾的字符串就是從緩衝區的開始處開始幷包含空字符的任何內容。

const int bufferLength = 256; 
char buffer[bufferLength] = "somestring"; //10 character plus a null character put by the compiler - total 11 characters 

這裏編譯器會在「somestring」之後放置一個空字符(即使您不要求,也會這樣做)。因此,儘管緩衝區的長度爲256,但所有使用以NULL結尾的字符串(如strlen())的函數將不會超出位置10處的空字符。

這就是「提前終止」 - 無論數據是在哪超出空字符的緩衝區將被忽略設計用於以空字符終止字符串工作的任何代碼。最後一部分很重要 - 代碼可以很容易地忽略空字符,然後在空字符上不會發生「終止」。