字符数组和字符串数组0问题
//字符数组
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char const *argv[])
{
char x[] = "abcdefg";                            //字符串存储会默认后⾯加⼀个字符“\0”
char y[] = {'a','b','c','d','e','f','g'};      //单字符存储则不会有“\0”
cout << sizeof(x) << endl;   //sizeof 计算实际存储的字节数,包括"\0"           
cout << sizeof(y) << endl;    //
cout << strlen(x) << endl;   //strlen计数器,逐个计算所有遍历的字符不包括“\0”
cout << strlen(y) << endl;    //输出14 = y[]的7 + x[] 的7
return0;
}
zl@LAPTOP-2ABL2N6V:/mnt/d/基础⼊门/08-数据结构$ g++ 1.cpp -o 1
zl@LAPTOP-2ABL2N6V:/mnt/d/基础⼊门/08-数据结构$ ./1
8
7
字符串转数组char7
14
zl@LAPTOP-2ABL2N6V:/mnt/d/基础⼊门/08-数据结构$
  经过仔细研究发现:cout << strlen(y) << endl; //输出14 = y[]的7 + x[] 的7  有很多⼈有疑问
  实际上我们也知道 strlen就是逐个计算字符直到'\0'为⽌,
      strlen(y) 计算为 7        但是这个时候还不算完,因为没扫描的'\0'  机器还有继续扫描;
      从上往下,从先往后选择⽬标字符串长度(带上'\0')⼤于y[]的字符串长度的字符串继续扫描,到了x[]  7  ,也扫描到了'\0',结束扫描;      共计计数  7 + 7 =14
  总结:strlen计数时,如果⼀次计数完成未到'\0',计数不会停⽌,
      这个时候他会继续顺序寻其他(带上'\0')更长的数组继续计数,继续计数并寻'\0',重复下去,
        直到到'\0'结束计数,或者不到其他(带上'\0')更长的数组,也会停⽌计数。
        字符串数组 x[] = "abcdefg"; 这样的会默认有\0 strlen计数不计算,但站字符长度(sizeof可测),带上'\0'表⽰的就是长度算上隐藏的'\0' //字符数组
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char const *argv[])
{
char b[] = {'a','b','d','f'};    //4    ⼤于3
char c[] = {'a','b','d','d'};    //4    ⼤于3
char x[] = "bdc";                //3    计数为4⼤于3
char a[] = "a";
char y[] = {'a','b','c'};        //3
//  cout << sizeof(x) << endl;     
//  cout << sizeof(y) << endl;
//  cout << strlen(x) << endl;
cout << strlen(y) << endl;      //输出14
return0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。