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类型的字符串。

  • 相关阅读:
    (二)vue.js axios封装(参考)
    (一)vue.js 项目搭建(参考)
    Centos7 Mysql配置安装
    自我学习及提高
    (一)Angular2 项目搭建教程(参考)
    WordPress学习网站
    Excel A表与B表对比 并将A表的id写到B表中
    C# 递归文件夹 文件名 路径
    C# 递归生成树(无限级)
    Windows API Code Pack 获取文件缩略图
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/8541992.html
Copyright © 2011-2022 走看看