C bzero不';不要照它说的做
我使用C bzero不';不要照它说的做,c,C,我使用vscode作为我的代码编辑器,在头文件中有一个名为bzero的函数,当鼠标悬停在该函数上时vscode表示bzero将N个字节的S设置为0。但我认为它不是这样工作的。我创建了一个由11个字符组成的数组,称为s,并将其放入Hello World 然后我使用bzero将s的前4个字节设置为0,但从输出来看,它似乎清除了整个缓冲区 #包括 #包括 int main(int argc,char const*argv[] { char s[11]=“你好,世界”; b0(s,4); 卖出(s);
vscode
作为我的代码编辑器,在头文件
中有一个名为bzero
的函数,当鼠标悬停在该函数上时vscode
表示bzero将N个字节的S设置为0。
但我认为它不是这样工作的。我创建了一个由11个字符组成的数组,称为s
,并将其放入Hello World
然后我使用bzero
将s
的前4个字节设置为0,但从输出来看,它似乎清除了整个缓冲区
#包括
#包括
int main(int argc,char const*argv[]
{
char s[11]=“你好,世界”;
b0(s,4);
卖出(s);
返回0;
}
零是字符串终止字符。因此,如果将字符串的第一个字节设置为零,
put
将认为字符串为空。完全按照它所说的做。您所面临的问题是由于对C中字符串是什么的误解
简言之,a是一个以零结尾的缓冲区,为char
s。也就是说,C将char
s数组视为一个字符串,方法是考虑所有char
s,直到找到第一个值为0的数组
put
(和printf
等)使用“字符串”的这一定义
因此,即使将数组中的第一个char
设置为0,也会导致空字符串,而不管后面是什么
(还要注意,bzero
是一个遗留函数,不鼓励使用它;请改用。)put()
需要一个指向字符串的指针。C中的字符串是以空字符('\0'
)结尾的字符序列*。空字符由值零表示
因此,put()
在第一个零处停止并打印一个空字符串
打印整个缓冲区以查看bzero()
的效果
你认为
在哪里停止打印?是什么使字符数组成为C中的字符串?@Lundin一旦\0
到达,您可以尝试使用bzero(&s[5],4)查看差异:@真的!而且\0
的值为零,因此它在第一个字符处停止。当然bzero需要一个指针,即s。输出解释了很多,谢谢!
$ cc main.c -o main && ./main
# empty
$
#include <strings.h>
#include <stdio.h>
int main(int argc, char const *argv[])
{
char s[11] = "Hello World";
bzero(s, 4);
for (int i = 0; i < 11; i++) printf("%d ", s[i]); // print elements of the buffer
puts(s);
return 0;
}
0 0 0 0 111 32 87 111 114 108 100