zoukankan      html  css  js  c++  java
  • sizeof和strlen在string类中的使用

    字符串的sizeof和strlen

    考虑下面的问题:

    char a[] = "abcdef";

    char b[20] = "abcdef";

    string s = "abcdef";

    cout<<strlen(a)<<endl;   // 6,字符串长度

    cout<<sizeof(a)<<endl;   // 7,字符串容量

    cout<<strlen(b)<<endl;   // 6,字符串长度

    cout<<sizeof(b)<<endl;   // 20,字符串容量

    cout<<sizeof(s)<<endl;   // 32, 这里不代表字符串的长度,而是string类的大小,要想知道s字符串的长度,要用sizeof(s.c_str())

    cout<<strlen(s)<<endl;   // 错误!s不是一个字符指针。

    a[1] = '';

    cout<<strlen(a)<<endl;   // 1

    cout<<sizeof(a)<<endl;   // 7,sizeof是恒定的

        strlen是寻找从指定地址开始,到出现的第一个0之间的字符个数,他是在运行阶段执行的,而sizeof是得到数据的大小,在这里是得到字符串的容量。所以对同一个对象而言,sizeof的值是恒定的。string是C++类型的字符串,他是一个类,所以sizeof(s)表示的并不是字符串的长度,而是类string的大小。strlen(s)根本就是错误的,因为strlen的参数是一个字符指针,如果想用strlen得到s字符串的长度,应该使用sizeof(s.c_str()),因为string的成员函数c_str()返回的是字符串的首地址。实际上,string类提供了自己的成员函数来得到字符串的容量和长度,分别是Capacity()和Length()。string封装了常用了字符串操作,所以在C++开发过程中,最好使用string代替C类型的字符串。

  • 相关阅读:
    iOS-实现键盘右上角完成按钮
    iOS-开发中单例模式的实现
    iOS-实现高斯模糊效果(swift)
    iOS-解决UITableView有footerView时最后一个cell不显示分割线问题
    fenics 笔记 -- Possion Problem
    笔记
    Hyper-reduced projective dynamics 手推公式
    Gmsh 四面体单元剖分
    SoftRoboSim 之程序框架
    物理引擎中的时间积分方法及求解
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8541992.html
Copyright © 2011-2022 走看看