首页 > 其他 > 详细

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

时间:2015-08-27 07:04:14      阅读:475      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!