当前位置:  技术问答>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);  ...

本帖最后由 INTEL_CHIP 于 2012-12-01 22:53:47 编辑
大家好,有一段代码如下:

 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, "北");

|
去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

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • gcc链接错误 "multiple definition of `memchr ..."


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3