char *a=NULL;
char *s=NULL;
a=(char *)calloc(1,(sizeof(char)));
s=(char *)calloc(1,(sizeof(char)));
a="DATA";
memcpy(s,a,(strlen(a)));
printf("%s",s);
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么它打印DATA½½½½½½½■■■??????????????????? 谢谢
C中的字符串以零字符值(nul)终止.
strlen返回零之前的字符数.
所以你不是在复制零.
printf继续运行,在s之后打印内存中的任何内容,直到它达到零.
您也只是创建一个大小为1的缓冲区,因此您在s之后的任何内容上写入数据,并且在将set设置为文字之前将内存calloc泄漏到a.
在找到字符串的长度后,为s分配内存,再分配一个字节以包含nul终止符,然后将a复制到s中.在存储文字"DATA"之后,您不需要为C运行时分配任何内容.