漫谈程序编码 C++
汇编器的执行过程

勿把字符数组当字符串

皮贝贝 posted @ 2008年11月24日 04:12 in 未分类 , 1770 阅读
  • 字符串

        字符串诚然是字符数组,于字符串考虑我们是这样初始化的:

char* s1 = "hello"; // 自动转作 const char* s1 = "hello"
char  s2[] = "hello";

      编译器对上面的处理是在最末加一个 '\0' , 一些字符串函数也是依此来判定字符串结尾,因此 strlen() 函数对上述求值为 5, 而求其大小sizeof(s1) == 6.

      上述是字符串初始化的经典形式。是标准所推荐的安全初始化。

  • 字符数组

      若是我们是依普通数组之方式初始化:


char s3 [] = {'h', 'e', 'l', 'l', 'o' };

  

       于此,s3 只是一个盛放着散乱的字符的数组, 故sizeof( s3 ) == 5, 但对字符串操纵的函数却出乎意料, strlen () 函数可能所得的值要大于5.

       而改成下列, 就变成了字符串了:


char s3[] = {'h', 'e', 'l', 'l', 'o', '\0'};

     而这与下列是等价的:


char s3[] = "hello";

   而此处编译器帮你完成了尾部加  '\0'.

  • 总论

        所以说,

            字符串  !=  字符数组。

      确切的说是:

          字符串  <   字符数组

     即字符串是字符数组的子集。字符串是特殊的字符数组, 是一个尾部带 '\0' 小尾巴的特殊字符数组,而这个小尾巴是由编译器来帮你完成。

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter