A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lyan 中级黑马   /  2014-10-5 02:11  /  942 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.     char chars[] = "12345678";
  2.     printf("%d\n",sizeof(chars)); // 9  这个毫无疑问8个字节+一个字节'\0'
  3.     printf("%d\n",strlen(chars)); // 8  这个也没问题,有几个字符长度就是几
  4.    
  5.     char chars1[5] = "12345678";
  6.     printf("%d\n",sizeof(chars1)); // 5 这个也没问题,只定义了5个字节
  7.     printf("%d\n",strlen(chars1)); // 6 [color=Red]?这个想不明白[/color]
复制代码

结果:
  1. 9
  2. 8
  3. 5
  4. 6
复制代码

3 个回复

倒序浏览
代码里不能嵌套红色字体。。。。我晕
回复 使用道具 举报
顶上来
回复 使用道具 举报
你对strlen()这个函数的工作原理不是很了解,这个函数只考虑'\0',只要遇到'\0'就会结束计算长度
      
    char chars1[5] = "12345678";
//这句代码会向操作系统申请5字节的内存,操作系统只能保证分配给你的这5个字节不被其他进程破坏。也就
//说你的只有12345,被操作系统存放在了这5个字节里。
   
printf("%d\n",sizeof(chars1)); // 5 这个也没问题,只定义了5个字节
    printf("%d\n",strlen(chars1));
// 字符串都是都是以'\0'结尾,strlen(chars1也是寻找字符串的'\0'前有几个字符,有几个字符就会返回几,
由于你把第5五个字节存了’5‘,因此strlen()在寻找到第五字节时,没有结束,继续向下寻找'\0',可是操作系统只给你了5个字节,之后的字节不是你程序所在进程能够控制的(不属于你的进程),这部分是不确定的。谁也不知道下一个'\0‘在哪里,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马