c-malloc意外分配内存



这里有一个代码,它分配一些内存并将字符串复制到其中

#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("%sn",t);
printf("%s",s);
return 0;
}

现在的输出是

your_char
your_char☺╚

而这正是我无法理解的。如果我更改为memcpy(s,t,10),那么末尾就没有垃圾值。

我认为这是因为在第二种情况下也会复制null终止符但是,当我只分配了9个字节,而它们已经被我复制的字符占用时,为什么会有一个空的地方

字符串是以null结尾的字符数组("null字符"是指数值为0的字符(。null字符标记字符串的末尾,如果数组中没有null字符,则它不是字符串。特别是,不能用%s说明符printf它,因为printf不知道它在哪里结束。

字符串文字总是自动有一个字符,例如,"your_char"中有十个字符,而不是九个。如果动态分配字符串,则应始终考虑额外的字符。

相关内容

  • 没有找到相关文章

最新更新