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