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数组视为字符串。

putsprintf等等)使用“字符串”的这个定义。

因此,即使只设置第一个 char数组中为 0导致空字符串,无论后面是什么。

(还要注意,这bzero是一个遗留函数,不鼓励使用它;memset改用它。)


以上是bzero不做它所说的的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>