[英]Unexpected memory allocation by malloc
这是分配一些 memory 并将字符串复制到其中的代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char *t ="your_char";
char *s = (char*)malloc(9);
memcpy(s,t,9);
printf("%s\n",t);
printf("%s",s);
return 0;
}
现在 output 是
your_char
your_char☺╚
这就是我无法理解的。 如果我更改为memcpy(s,t,10)
,则末尾没有垃圾值。
我认为这是因为 null 终止符在第二种情况下也被复制了。 但是为什么我只分配了9个字节并且它们已经被我复制的字符占用了,所以根本没有空位。
字符串是一个以null 结尾的字符数组(“空字符”是数值为 0 的字符)。 null 字符标记字符串的结尾,如果数组中没有 null 字符,则它不是字符串。 特别是,您不能使用%s
说明符printf
它,因为printf
不知道它在哪里结束。
字符串文字总是自动包含一个,例如, "your_char"
中有十个字符,而不是九个。 如果动态分配字符串,则应始终考虑额外的字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.