zoukankan      html  css  js  c++  java
  • 字符串处理时刻提醒自己要在末尾手动加''

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

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

     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分配了多少字节,那单步调试总可以看出来吧?答案是否定的,我们看一下

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

  • 相关阅读:
    发送指令
    WIN32得到HWND
    查找摄像头
    WindowImplBase::OnSysCommand-------duilib在最大化和还原间切换
    CImage将图片转为指定像素大小
    聚集索引和非聚集索引(整理)
    数据库SQL优化大总结之 百万级数据库优化方案
    架构师之路(39)---IoC框架
    .NET Reflector反编译的方法
    PowerDesigner之PDM(物理概念模型)
  • 原文地址:https://www.cnblogs.com/bewolf/p/4747396.html
Copyright © 2011-2022 走看看