关于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

转载于:https://www.cnblogs.com/sunfishgao/p/4762181.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值