免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1698 | 回复: 7
打印 上一主题 下一主题

memcpy的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-09 15:01 |只看该作者 |倒序浏览
int _sgetl(char *s)
{
   int ntmp,len;

   memcpy(&ntmp,s,sizeof(long int));
   len=ntohl(ntmp);
   return len;
}

请问memcpy(&ntmp,s,sizeof(long int));是什么意思?
s是一个字符型的指针变量,而ntmp是一个整形变量,能这么用吗?

论坛徽章:
0
2 [报告]
发表于 2003-06-09 15:21 |只看该作者

memcpy的问题

由s所指内存区域复制size of(long int)个字节到ntmp所指内存区域。函数返回指向ntmp的指针。
我觉得应该是没有问题的,s只是将地址传递给ntmp所指向的地址,跟指针的地址传递是一样的

论坛徽章:
0
3 [报告]
发表于 2003-06-09 15:43 |只看该作者

memcpy的问题

原帖由 "sandy_23678" 发表:
由s所指内存区域复制size of(long int)个字节到ntmp所指内存区域。函数返回指向ntmp的指针。
我觉得应该是没有问题的,s只是将地址传递给ntmp所指向的地址,跟指针的地址传递是一样的
   
ntmp是数值型的,他占的内存和字符型的占的内存是一样的吗?
我个人认为s将地址传递给ntmp所指向的地址是没错的,但是再往底下一句看,就不明白什么意思了。能解释一下这一句吗?

论坛徽章:
0
4 [报告]
发表于 2003-06-09 16:06 |只看该作者

memcpy的问题

len=ntohl(ntmp);
n代表network,h代表host,l代表32位的长整型
ntohl是将网络字节序转换成32位的长整型主机字节序
返回的是主机字节序,
uint32_t ntohl(uint32_t netvalue);

论坛徽章:
0
5 [报告]
发表于 2003-06-09 17:55 |只看该作者

memcpy的问题

这看起来是个解包的一段代码
传进来的应该是按某种约定打的包
它的前4个字节指示了这个包的长度,是在打包时写进去的
这段代码把这4个字节取出来再转换成主机字节序。

论坛徽章:
0
6 [报告]
发表于 2003-06-09 18:08 |只看该作者

memcpy的问题

应该是翻译IP地址呢。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-06-09 18:34 |只看该作者

memcpy的问题

原帖由 "sandy_23678" 发表:
由s所指内存区域复制size of(long int)个字节到ntmp所指内存区域。函数返回指向ntmp的指针。
我觉得应该是没有问题的,s只是将地址传递给ntmp所指向的地址,跟指针的地址传递是一样的
   

这个解释是正确的。如果能够保证sizeof(long int)不比sizeof( ntmp)大。那么楼主的代码不会core dump的。

论坛徽章:
0
8 [报告]
发表于 2003-06-09 21:17 |只看该作者

memcpy的问题

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP