bzero不做它所说的
我vscode用作我的代码编辑器,在头文件中<strings.h>有一个函数被调用bzero,当鼠标悬停在该函数上时vscode说,bzero Set N bytes of S to 0.但我不认为它是这样工作的。我创建了一个由 11 个字符组成的数组,它调用s并放置在其中Hello World。
然后我曾经bzero将前 4 个字节设置s为 0,但从输出来看,它似乎清理了整个缓冲区。
#include <strings.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{
char s[11] = "Hello World";
bzero(s, 4);
puts(s);
return 0;
}
$ cc main.c -o main && ./main
# empty
$
回答
bzero完全按照它说的做。您面临的问题是由于误解了 C 中的字符串是什么。
简而言之,C 字符串是chars的零终止缓冲区。也就是说,Cchar通过考虑所有chars 直到找到第一个值为 0的s来将s数组视为字符串。
puts(printf等等)使用“字符串”的这个定义。
因此,即使只设置第一个 char数组中为 0导致空字符串,无论后面是什么。
(还要注意,这bzero是一个遗留函数,不鼓励使用它;memset改用它。)