关于char*型“字符串”的内存覆盖问题

int _tmain(int argc, _TCHAR* argv[])
{
    char string1[3] = "aaa"; //一般来说很多IDE都会报错,但有的不会

                                          //实际上,const char[6] 的值是不能用于初始化char[5]的实体的

  char string2[3] = "bb";

  

  return 0;
}

 

我们假设上一段代码,编译器并不报错。当你使用strlen(string1) 的时候,结果是6而不是3。

为什么?

  因为strlen()这个函数是寻找'\0'. 而string1并没有以'\0'结尾。所以strlen会顺着内存下去找,直到找到一个'\0'

而这个结束符是string2的。。。所以你得到了6(string1 + string2)的长度值。

 

另外说下,strlen()和sizeof()的结果也是不同的。strlen()在正常情况下是比sizeof()少1的。因为strlen并不把字符串的最后一位'\0'当作长度算进去。

 cout<<sizeof("test")<<endl;   //结果是5
 cout<<strlen("test")<<endl;   //结果是4

posted @ 2015-08-27 04:56  chunyi  阅读(232)  评论(0编辑  收藏  举报