免费注册 查看新帖 |

Chinaunix

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

[函数] 别人帮忙写库函数,在下看不懂,请高手指点一番,多谢了! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-22 17:32 |只看该作者 |倒序浏览
PRO C中VARCHAR型的数据出来后,在其结尾需加'\0',于是有人专门写了一个函数来实现其功能。
函数如下:
set_null(q)
  char  *q;
{
  char  *p;
  short length;

  p = q;
  memcpy(&length, p, sizeof(short));
  p += sizeof(short);
  p[length] = '';
}

[ 本帖最后由 jacky_yin 于 2005-11-22 17:41 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-11-22 17:56 |只看该作者
P的前sizeof(short)位是一个长度,后面才是内容。

论坛徽章:
0
3 [报告]
发表于 2005-11-22 18:02 |只看该作者

回复 2楼 zhhui2000 的帖子

这其中p和q都是地址,memcpy是对址的操作吗,为何经过此操作后,length就有值了呢?

论坛徽章:
0
4 [报告]
发表于 2005-11-22 18:18 |只看该作者
memcpy实际上就是memory copy,也就是复制内存的内容
memcpy(&length, p, sizeof(short));
复制的目标由第一个参数指示
复制的源由第二个参数指示
复制的字结束的多少有第三个参数指示

VARCHAR
实际相当于
typedef struct
{
    short length;
    char* buffer;
} VARCHAR;

其中length用于保存buffer所指向的字符串的长度。

假定有一个VARCHAR结构的变量已经正确初始化, 并将其地址赋值给char* 型的变量p;
那么,p->的空间的前两个字节的数据就是VARCHAR类型变量中的长度成员length.

memcpy(&length, p, sizeof(short));
执行的就是从地址p开始,取sizeof(short) == 2字节的空间的数据,复制给&length所引用的内存空间。

然后,你在调整p = p + sizeof(short)就指向了实际的数据,字符串数组下标从0开始到length - 1,
然后
0....length - 1存储的是实际数据。
p[length] = *(p + length) = '' = '

论坛徽章:
0
5 [报告]
发表于 2005-11-22 18:23 |只看该作者
这个函数别人给你写的,但是没给你写注释,这个字符串的交易码,居然前两为是长度,
如果长度不够,怎么办?
怎么也要注释的.楼上上的很对

论坛徽章:
0
6 [报告]
发表于 2005-11-22 18:24 |只看该作者

回复 4楼 renstone921 的帖子

多谢这位大哥的帮助,太感谢了。看后获益菲浅啊!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP