在C语言中,当char buffer在同一范围内多次使用时,对char buffer使用的说明

在C语言中,当char buffer在同一范围内多次使用时,对char buffer使用的说明,c,char,memset,C,Char,Memset,在C编程中,字符缓冲区用于字符串实现。习惯上,在任何范围内使用任何字符缓冲区之前,我们都会清除内容。当char缓冲区在同一范围内使用多次时,我需要澄清如何清理char缓冲区。 例如 在下面的函数中,我使用char buffer[BUF_SIZE] void function foo(char *p_char) { char buffer[BUF_SIZE]; memset(buffer, '\0', BUV_SIZE-1); strcpy(buffer, p_char); .. ..

在C编程中,字符缓冲区用于字符串实现。习惯上,在任何范围内使用任何字符缓冲区之前,我们都会清除内容。当char缓冲区在同一范围内使用多次时,我需要澄清如何清理char缓冲区。 例如 在下面的函数中,我使用char buffer[BUF_SIZE]

void function foo(char *p_char)
{
 char buffer[BUF_SIZE];
 memset(buffer, '\0', BUV_SIZE-1);
 strcpy(buffer, p_char);
 ..
 ..
 // after some codes.
 strcpy(buffer, "second time use of buffer");

}
在上面的函数中,缓冲区被使用了两次,在第二个位置,我是否需要调用memset()来清除缓冲区中以前的内容?
同样地,在使用字符缓冲区时,我是否总是在赋值之前清除它(如果值在同一范围内多次赋值给缓冲区)?

如果不将缓冲区设置为空字符,则空终止符后面的字符可能是垃圾,但这通常并不重要,因为当有人读取字符*字符串时,它通常在空终止符处停止。

如果您使用的是
strcpy
,则实际上不需要
memset
。从
man strcpy
页面可以注意到

函数的作用是:将src指向的字符串,包括终止的空字节('\0')复制到dest指向的缓冲区。字符串不能重叠,目标字符串dest必须足够大才能接收副本

因为,
\0
也被复制,所以实际上不需要执行
memset
,对于
字符串
,终止的
NULL\0
字符表示
字符串
的结尾

注意:如果您计划使用
strncpy
,请务必参考以下问题:

我不知道“我们”是谁,但在使用
char[]
之前,我不会“习惯性地清除内容”。事实上,我不知道我曾经做过,如果只是字符串的话。