【发布时间】:2017-06-30 16:40:20
【问题描述】:
考虑一下这段代码 sn-p(为了清楚起见,简化了语法)。
void simple (char *bar) {
char MyArray[12];
strcpy(MyArray, bar);
}
我的导师说 MyArray 最多可以从 bar 复制 12 个元素,但是从我的读过,MyArray 只能存储 11 个字符,因为它最后需要空字符的空间。因此,如果 bar 的接收值为 12 或更大,则会发生缓冲区溢出。我的导师说只有当收到 bar 的值时才会发生这种情况 为 13 或更大。谁是对的?如果你能引用一个可靠的消息来源,我将不胜感激,这样我就可以说服他。
【问题讨论】:
-
man strncpy完全回答了这个问题。 -
man strcpy。 strcpy() 函数将 src 指向的字符串,包括终止的空字节 ('\0') 复制到 dest 指向的缓冲区中。 -
@Oka,您的报价不完整,因此是错误的。
-
标题为
strncpy,但代码使用strcpy。你问的是哪个? -
对不起大家,我指的是strcpy(),strncpy()是错别字