Code Bye

ubentu 下的memcpy拷贝失败 原因


   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   #include <arpa/inet.h>

   int main(void)
   {
           char *buf=(char *)malloc(100);
           int len=5;
          int *p = &len;
          memcpy(buf,p,4);
          printf("%s \n",buf);
         return 0;
  }

如上所示,打印出来的是空串,想知道错在哪里了,求大神解答

17分

memcpy(buf,p,4) 的意思是你从p地址开始拷贝4个字节,这四个字节是什么顺序呢?取决于你的机器是大端还是小端

printf(“%s \n”,buf);这个函数遇到字节0就会结束,所以你的机器上这个buf 应该是 0x00 0x00 0x00 0x05,所以就是空串了

17分

正确情况是梅花图案

将buf格式化
memset(buf,0,100);
memcpy(buf,p,sizeof(len));

你知道你的代码隐患多大么?

16分

引用 2 楼 hlx_beat 的回复:

正确情况是梅花图案

就算是小端也不一定可以打印出
要看终端环境
ascii 的 1 ~ 32 都是不可见字符

 
引用 3 楼 dooX8086 的回复:
Quote: 引用 2 楼 hlx_beat 的回复:

正确情况是梅花图案

就算是小端也不一定可以打印出
要看终端环境
ascii 的 1 ~ 32 都是不可见字符

引用 2 楼 hlx_beat 的回复:

正确情况是梅花图案

将buf格式化
memset(buf,0,100);
memcpy(buf,p,sizeof(len));

你知道你的代码隐患多大么?

引用 1 楼 baidu_29175517 的回复:

memcpy(buf,p,4) 的意思是你从p地址开始拷贝4个字节,这四个字节是什么顺序呢?取决于你的机器是大端还是小端

printf(“%s \n”,buf);这个函数遇到字节0就会结束,所以你的机器上这个buf 应该是 0x00 0x00 0x00 0x05,所以就是空串了

谢谢各位的回答,已经找到答案了,
printf(“%s \n”,buf);
改成:
printf(“%d \n”,*(int *)buf);
打印出来了,指针没处理好。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明ubentu 下的memcpy拷贝失败 原因