Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对传递给strncat的计数值有疑问_C_String - Fatal编程技术网

对传递给strncat的计数值有疑问

对传递给strncat的计数值有疑问,c,string,C,String,假设我有一个大小为10个字符的数组(memset为0),我将其作为目标传递给strncat,而在source中,我传递的字符串长度为20个字符(以null结尾),现在我应该将“count”传递为10还是9 问题是,strncpy是否将“计数”视为目标缓冲区的大小,还是只将10个字符复制到目标缓冲区,然后在第11个位置追加一个空终止字符 很抱歉,如果这个问题看起来太琐碎,但我无法从strncpy的帮助文档中理解它。您可能应该再多问一点。最重要的一句似乎是: strncat()函数类似, 除了它最多

假设我有一个大小为10个字符的数组(memset为0),我将其作为目标传递给strncat,而在source中,我传递的字符串长度为20个字符(以null结尾),现在我应该将“count”传递为10还是9

问题是,strncpy是否将“计数”视为目标缓冲区的大小,还是只将10个字符复制到目标缓冲区,然后在第11个位置追加一个空终止字符

很抱歉,如果这个问题看起来太琐碎,但我无法从strncpy的帮助文档中理解它。

您可能应该再多问一点。最重要的一句似乎是:

strncat()函数类似, 除了它最多使用n 来自src的字符。结果呢, 始终以“\0”结尾,位于 大多数n+1字符都已写入


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