码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-27 07:04:22      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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

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

标签:

原文地址:http://www.cnblogs.com/sunfishgao/p/4762181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!