sizeof(cha[])和strlen(cha[]),以及string.length()和sizeof(string)的对比。

#include <iostream>
using namespace std;

int main(){
    char cha[] = "wang";
    cout<<strlen(cha)<<endl;
    cout<<sizeof(cha)<<endl;
}

输出:

4
5

strlen不计算'\0' ,sizeof计算'\0'

cha存储的数据

定义char数组的方式:

  1. char cha[]="wang";
  2. char char[]={'w','a','n','g','\0'}

string和char数组不同,是一个类,不仅存储了字符,还存储了其他字符串相关的信息。

#include <iostream>
using namespace std;

void fun(char* str, int length){
    str[0] = 'd';
    cout<<"fun:"<<strlen(str)<<endl; //返回字符串的大小
    cout<<"fun:"<<sizeof(str)<<endl; //不仅包含字符串本身,还有不知道其他是啥数据。
    return;
}

int main(){
    string str = "wang";
    cout<<str.length()<<endl; //返回字符串的大小,不包括'\0'
    cout<<sizeof(str)<<endl; //返回对象str的大小,不仅包含字符串本身,还有其他数据。
    cout<<str<<endl;
    fun((char*)str.data(), str.length()); //通过(char*)str.data()可以将string转成char*,另外也可以通过str.c_str()转成const char*.
    cout<<str<<endl;
    return 0;
}

输出:

4
24
wang
fun:4
fun:8
dang
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,387评论 0 6
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 2,724评论 0 73
  • 题目来源:1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;2、C 语言面试宝典(林锐《高质量编程...
    月震阅读 1,861评论 0 1
  • 关于发呆这件大事 两眼呆呆的望着天花板,好像几个月都没有提笔写,奥,不,是动动手指码几个字了,这大概是写文大忌,还...
    幺幺读书阅读 211评论 5 2