C ++使用null部分填充数组

时间:2010-10-20 08:17:51

标签: c++ arrays null

NoobQuestion: 我听说填充char数组可以使用null char尽早终止。这是怎么做到的? 我搜索了每一个谷歌搜索结果,但仍然空手而归。

2 个答案:

答案 0 :(得分:5)

你的意思是这样的:

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

此输出

helloworld
he

答案 1 :(得分:1)

这是一种名为“以null结尾的字符串”的约定。如果你有一个内存块,你将其视为一个char缓冲区,并且该缓冲区中有一个空字符,那么以null结尾的字符串是从缓冲区的开头开始包含的任何内容,包括空字符。

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

这里编译器会在“somestring”之后放置一个空字符(即使你没有要求也会这样做)。因此,即使缓冲区的长度为256,所有使用以空字符结尾的字符串(如strlen())的函数也不会读取超出位置10的空字符。

这就是“提前终止” - 无论数据是否在空字符之外的缓冲区中, 任何设计用于处理以空字符结尾的字符串的代码 都会忽略它。最后一部分很重要 - 代码可以很容易地忽略空字符,然后在空字符上不会发生“终止”。