个人感觉C\C++对字符处理并不太好,本篇内容也是一些公司喜欢问的基础问题。
- 首先,讨论一下size()、length()、strlen()、sizeof()区别(很多人搞不清楚)
-
size()和length()这两个函数是用来计算string类对象或者即STL对象方法。都是计算字符串长度。
- strlen()是函数,参数必须是字符型指针(char*),计算从开始到结束(’\0‘),返回的长度大小不包括’\0’,也是计算字符长度。
- sizeof()是运算符,不能计算复杂内存分配空间大小。计算字符所占空间大小。
-
- 实例(这里只考虑基础数据类型)
- size()和length()实例
string str1 = "qwe";
int laji = 0,laji2 = 0;
laji = str1.size(); //3
laji2 = str1.length(); //3
运行结果:
- strlen()实例
char cha[10] = "abasdasc";
char* ch3 = "shh";
int i = 0, i1 = 0;
i = strlen(ch3); //3
i1 = strlen(cha); //8
运行结果:
- sizeof()实例
char cha[10] = "abasdasc";
char m_p[] = "shh";// { '1','2','3','4','5' };
int length = 0;
length = sizeof(ch3); //4 包含\0结束符,所以长度+1
length = sizeof(*ch3); //1 *ch3是第一个字符
length = sizeof(m_p); //4
length = sizeof(*m_p); //1
length = sizeof(cha); //10 分配10个内存地址
length = sizeof(*cha); //1
这里有个特殊情况:
字符数组作形参传入函数是,会退化成指针。(这里实际是传入的数组的首地址,也就是个指针)
void function(char a[])
{
cout<<sizeof(a)<<endl;
}
char array[20];
cout<<sizeof(array)<<endl;
function(array);
输出:
20
4
关于本博深入话题分享博客:
https://blog.csdn.net/li_jia_tu/article/details/88411499
https://blog.csdn.net/OneTapMan/article/details/82420950
https://blog.csdn.net/qq_41289920/article/details/86763959
https://www.liangzl.com/get-article-detail-15127.html