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

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

  • 相关阅读:
    pip 安装依赖 requirements.txt
    TCP三次握手四次挥手详细理解附面试题
    装饰器修复技术
    BBS(第一篇)
    Auth模块
    Django--中间件
    cookie和session
    创建多对多表关系的三种方式
    批量插入数据,自定义分页器
    Django--几个重要方法优化(面试重点)
  • 原文地址:https://www.cnblogs.com/bewolf/p/4747396.html
Copyright © 2011-2022 走看看