繁体   English   中英

意外的 memory 由 malloc 分配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM