当前位置: 技术问答>linux和unix
memchr函数如何定位汉字的位置 ?字符在内存中的地址分布是怎样的?
来源: 互联网 发布时间:2017-03-25
本文导语: 本帖最后由 INTEL_CHIP 于 2012-12-01 22:53:47 编辑 大家好,有一段代码如下: char *p1 = "我爱北京天安门"; char *p2 = NULL; p2 = memchr(p1, '北', 7); // 这行代码会显示警告 printf("p1= %dn", p1); ...
char *p1 = "我爱北京天安门";
char *p2 = NULL;
p2 = memchr(p1, '北', 7); // 这行代码会显示警告
printf("p1= %dn", p1);
printf("p2= %dn", p2);
printf("search in 10, p2-p1= %dn", p2-p1); // 输出:4
上面这段代码编译的时候,会显示warning: multi-character character constant之类的警告,
是不是因为汉字占两个字节,而单引号只能表示ASCII字符的原因 ?应该怎样写才能消除编译的警告呢 ?
还有,p2-p1 输出4,是因为汉字'北'之前有两个汉字,而每个汉字占用两个字节 ? 为什么p2要大于p1呢?在内存中的地址分布是怎样的 ?
请Linux C方面熟悉的朋友解答一下,本人才接触Linux C 开发, 不胜感激!!!
|
用strstr试试
p2 = strstr(p1, "北");
p2 = strstr(p1, "北");
|
去CU看回复吧,取决于你的终端编码,汉字是多字节编码的,gbk,utf-8都是不同的。
|
char *p1 = "我爱北京天安门";
char *p2 = NULL;
p2 = memchr(p1, '北', 7); // 这行代码会显示警告
printf("p1= %dn", p1);
printf("p2= %dn", p2);
printf("search in 10, p2-p1= %dn", p2-p1); // 输出:4
因为一个汉字占两个字节“我”第一个字节,二“北”是第三个字节,你取得是‘我’的首地址,和‘北’的首地址,故等于4
char *p2 = NULL;
p2 = memchr(p1, '北', 7); // 这行代码会显示警告
printf("p1= %dn", p1);
printf("p2= %dn", p2);
printf("search in 10, p2-p1= %dn", p2-p1); // 输出:4
因为一个汉字占两个字节“我”第一个字节,二“北”是第三个字节,你取得是‘我’的首地址,和‘北’的首地址,故等于4
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。