字符串处理时刻提醒自己要在末尾手动加''

时间:2022-04-26
本文章向大家介绍字符串处理时刻提醒自己要在末尾手动加'',主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

话不多说,大家都明白字符串是以''为结尾的,但偏偏今天编程序的时候忘了添加''了,结果浪费时间调试一番才发现,囧死了。

先通过一段代码看看,忘记加''会造成哪些难以发现的麻烦吧

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int main()
 5 {
 6     char *p;
 7     char *q="ab";
 8     p=new char[2];
 9     cout<<strlen(p)<<endl;
10     cout<<sizeof(p);
11     return 0;
12 }

运行结果:16,4

1、明明给p分配了两个字节strlen(p)为啥变成16了呢?别急,我们进入strlen()函数内部看一下。

int strlen (const char * str)
{
          int length = 0;

          while( *str++ )
                  ++length;
          return( length );
 }

原来strlen()是根据''来判断是否到字符串末尾的,而且不管是否已经越界,而程序运行的时候恰巧在p指针后的第16(这个根据不同情况是个随机值)个字节有个0,所以就认为是16了。

2、为啥sizeof(p)是4呢?这个不必多说了吧,p是指针,sizeof指针是固定值4(64bit系统中是8),不明白请看我之前专门写的一篇关于sizeof的博客

3、既然用sizeof和strlen方法都看不出来究竟给p分配了多少字节,那单步调试总可以看出来吧?答案是否定的,我们看一下

总之,编程中遇到字符串一定要记着在末尾手动加上''!!!!切记,切记。