【发布时间】:2012-09-20 18:15:41
【问题描述】:
来自cplusplus.com 关于memcpy:“该函数不检查源中的任何终止空字符 - 它总是精确复制 num 个字节。”
所以下面的代码应该会给出运行时错误,不是吗?
char str1[20] = "";
char str2[20] = "Another Text---";
memcpy(str1, str2, strlen(str2));
printf("%s\n%s", str1, str2);
但我总是使用我的 gcc 编译器从这段代码中获得正确的输出。这是否意味着 memcpy 实际上是从 str2 末尾复制空字符,还是只是一个随机案例?
编辑:我得到与str1[20] = "A" 相同的行为,因为一些答案指出str1[20] = "" 正在使用所有NULL 字符初始化字符串。
【问题讨论】:
-
在您的情况下,num bytes 是“Another Text---”的长度,因此将大量字符从缓冲区 str2 复制到缓冲区 str1 不会导致运行时错误。但是,如果 str1 未初始化为 null,则将 str1 用作以 null 结尾的字符串将导致崩溃(可能)。