NoobQuestion: 我听说填充char数组可以使用null char尽早终止。这是怎么做到的? 我搜索了每一个谷歌搜索结果,但仍然空手而归。
答案 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的空字符。
这就是“提前终止” - 无论数据是否在空字符之外的缓冲区中, 任何设计用于处理以空字符结尾的字符串的代码 都会忽略它。最后一部分很重要 - 代码可以很容易地忽略空字符,然后在空字符上不会发生“终止”。