您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

字符数组和字符串的区别

字符串是以结束符(’\0’)结束的字符数组,其在创建时,**’\0’**会自动添加到结尾

int main()
{
	char str[] = "12345";
	char str1[] = { '1','2','3','4','5' };
	cout << str << endl;//输出为12345
	cout << str1 << endl;//输出12345....直到遇到结束符为止
}
  • sizeof()是运算符,而不是一个函数,其作用是:获得对象所占的字节数, 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小

    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,X86为4,X64为8);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

  • strlen(…)是函数,要在运行时才能计算。 参数必须是字符型指针(char*), 且必须是以’\0’结尾的。

//例子1
int main()
{
	char str[10] = "12345";
	cout << sizeof(str) / sizeof(str[0]) << endl; //结果为10,不受存储内容的影响
	cout << strlen(str) << endl;//结果为5,计算字符串的长度,直到遇到结束符'\0',且结束符不算进长度
}

//例子2
int main()
{
	char str[10] = { 'a','b','\0','c','d' };
	cout << sizeof(str) / sizeof(str[0]) << endl; //结果为10
	cout << strlen(str)<<endl;//结果为2
}

//例子3
int main()
{
	char*str = "12345";
    char str1[] = "12345";
	cout << sizeof(str) << endl; //参数为指针时返回指针所占的大小,x86输出为4,x64输出为8;
    cout << sizeof(str1) << endl;//输出为6,参数为数组时返回数组所占的大小
	cout << sizeof(str[0]) << endl;//输出为1
	cout << strlen(str) << endl;//输出为5
}

//例子4
int main()
{
	char str[] = "12345";
	char str1[] = { '1','2','3','4','5' };
	char str2[5] = "12345"; //数组界限溢出
	char str2[6] = "12345";//正确
	cout << sizeof(str) << endl; //输出6,因为编译时会在字符串末尾加上结束符‘\0'
	cout << sizeof(str1) << endl; //输出5
}

数字0,结束符’\0’, 字符’0’区别:

在计算机中

char c1=0 —>0x00

char c2=’\0’ —>0x00

char c3=‘0’—>0x30

所以数字0和结束符’\0‘是一样的

参考:
strlen和sizeof的区别
字符数组和字符串的区别,C语言字符数组和字符串区别详解


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进