日期:2014-05-16  浏览次数:20671 次

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