对传递给strncat的计数值有疑问
假设我有一个大小为10个字符的数组(memset为0),我将其作为目标传递给strncat,而在source中,我传递的字符串长度为20个字符(以null结尾),现在我应该将“count”传递为10还是9 问题是,strncpy是否将“计数”视为目标缓冲区的大小,还是只将10个字符复制到目标缓冲区,然后在第11个位置追加一个空终止字符 很抱歉,如果这个问题看起来太琐碎,但我无法从strncpy的帮助文档中理解它。您可能应该再多问一点。最重要的一句似乎是: strncat()函数类似, 除了它最多使用n 来自src的字符。结果呢, 始终以“\0”结尾,位于 大多数n+1字符都已写入对传递给strncat的计数值有疑问,c,string,C,String,假设我有一个大小为10个字符的数组(memset为0),我将其作为目标传递给strncat,而在source中,我传递的字符串长度为20个字符(以null结尾),现在我应该将“count”传递为10还是9 问题是,strncpy是否将“计数”视为目标缓冲区的大小,还是只将10个字符复制到目标缓冲区,然后在第11个位置追加一个空终止字符 很抱歉,如果这个问题看起来太琐碎,但我无法从strncpy的帮助文档中理解它。您可能应该再多问一点。最重要的一句似乎是: strncat()函数类似, 除了它最多
strncat将为您应用空端子。因为它不知道您所指向的所谓字符串,所以它将假定空终端有空间。所以你想通过9级考试。$man strncat 如果src包含n个或更多字符,则strncat()将写入n+1个字符 到dest(src中的n加上终止的空字节)。因此, 目的地的大小必须至少为strlen(目的地)+n+1
$如果数组只能容纳10个字符,则计数应为9,因为
strncat
将尝试从src
添加count
字符和空终止符
同样,在这种情况下,您的
目的地应该在第一个位置有一个空终止符,因为这是您需要它开始追加的地方。简单的答案是:确保您的缓冲区足够大,如果您的缓冲区要容纳10个字符,请在缓冲区的大小上添加一个以容纳nul字符\0
。这是学习C语言的最大障碍之一
如果未指定适当的长度(不包括nul字符),则会发生缓冲区溢出和不可预知的结果,例如程序崩溃,或跳入再也看不到的树林
希望这有帮助,
顺致敬意,
汤姆
If src contains n or more characters, strncat() writes n+1 characters
to dest (n from src plus the terminating null byte). Therefore, the
size of dest must be at least strlen(dest)+n+1