读书人

memchr函数怎么定位汉字的位置 ?字符

发布时间: 2013-01-11 11:57:35 作者: rapoo

memchr函数如何定位汉字的位置 ?字符在内存中的地址分布是怎样的?
本帖最后由 INTEL_CHIP 于 2012-12-01 22:53:47 编辑 大家好,有一段代码如下:

char *p1 = "我爱北京天安门";
char *p2 = NULL;
p2 = memchr(p1, '北', 7); // 这行代码会显示警告

printf("p1= %d\n", p1);
printf("p2= %d\n", p2);
printf("search in 10, p2-p1= %d\n", p2-p1); // 输出:4


上面这段代码编译的时候,会显示warning: multi-character character constant之类的警告,
是不是因为汉字占两个字节,而单引号只能表示ASCII字符的原因 ?应该怎样写才能消除编译的警告呢 ?


还有,p2-p1 输出4,是因为汉字'北'之前有两个汉字,而每个汉字占用两个字节 ? 为什么p2要大于p1呢?在内存中的地址分布是怎样的 ?

请Linux C方面熟悉的朋友解答一下,本人才接触Linux C 开发, 不胜感激!!!


[解决办法]
去CU看回复吧,取决于你的终端编码,汉字是多字节编码的,gbk,utf-8都是不同的。
[解决办法]
用strstr试试
p2 = strstr(p1, "北");
[解决办法]
char *p1 = "我爱北京天安门";
char *p2 = NULL;
p2 = memchr(p1, '北', 7); // 这行代码会显示警告

printf("p1= %d\n", p1);
printf("p2= %d\n", p2);
printf("search in 10, p2-p1= %d\n", p2-p1); // 输出:4


因为一个汉字占两个字节“我”第一个字节,二“北”是第三个字节,你取得是‘我’的首地址,和‘北’的首地址,故等于4

读书人网 >UNIXLINUX

热点推荐