2010-10-20 63 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处的空字符。

这就是“提前终止” - 无论数据是在哪超出空字符的缓冲区将被忽略设计用于以空字符终止字符串工作的任何代码。最后一部分很重要 - 代码可以很容易地忽略空字符,然后在空字符上不会发生“终止”。