LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 778|回复: 2

请教sizeof()里面的值?

[复制链接]
发表于 2004-3-20 18:21:02 | 显示全部楼层 |阅读模式

  1. example:
  2. struct in_addr   in_val
  3. char            addrptr[BUFSIZE];
  4. mmcpy(addrptr,&in_val,sizefo(struct in_addr));



  5. connect(sockfd,(socket (const sturct sockaddr *)&serv,sizeof(serv));
复制代码

不同阿。。一个是取得struct in_addr的字节数,一个是取serv的字节数,哦~~我懂了,serv那里是一个指针,所以不能sizeof(const struct sockaddr *),是这样吗?
:help
发表于 2004-3-23 11:43:00 | 显示全部楼层
mmcpy(addrptr,&in_val,sizefo(struct in_addr));
这个sizeof(你打反了)是复制过程,长度是struct in_addre长度
connect(sockfd,(socket (const sturct sockaddr *)&serv,sizeof(serv));
这个sizeof是serv这个里面结构的长度,因为实际中很可能某些结构中有空的项
比如gethostname(好象是这个函数得到主机的dns信息,忘记了……)
它里面的结构中允许主机的ip和主机名是多项的,但是如果不满的话就是空,那么长度可能比原来的小
所以是用sizeof 实际结构长度
我理解是酱紫的
 楼主| 发表于 2004-3-23 18:17:24 | 显示全部楼层
谢谢!!我懂了。。用数据类型和用该数据类型的变量的结果一样。
以下的程序是打印出你的系统的数据类型占用的内存空间。

  1. struct A {
  2. int a;
  3. };

  4. int
  5. main(void)
  6. {
  7.     printf("int                %d\n",sizeof(int));
  8.     printf("int *              %d\n",sizeof(int *));
  9.     printf("unsigned           %d\n",sizeof(unsigned));
  10.     printf("unsigned int *      %d\n",sizeof(unsigned int *));

  11.     printf("long               %d\n",sizeof(long));
  12.     printf("long *             %d\n",sizeof(long *));
  13.     printf("unsigned long       %d\n",sizeof(unsigned long));
  14.     printf("unsigned long *     %d\n",sizeof(unsigned long *));

  15.     printf("char               %d\n",sizeof(char));
  16.     printf("char *             %d\n",sizeof(char *));
  17.     printf("unsigned char       %d\n",sizeof(unsigned char));
  18.     printf("unsigned char *     %d\n",sizeof(unsigned char *));
  19.      
  20.     printf("struct A            %d\n",sizeof(struct A));
  21.     printf("struct A *          %d\n",sizeof(struct A *));
  22.     return(0);
  23. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表