关于求字符串长度的问题,(strlen(),str.size()和str.length())

1.#include<string> //C++的string的库
A[0]就是A的第一个字母;
A.size() 和 A.length()都是A除去 ‘\0’ 的长度。

2.#include

#include"stdio.h"
#include"string.h"
int main()
{
   char A[]={'a',' ','c','d'};
   char B[]="a cd";
   printf("strlen(A)=%d\n",strlen(A));
    printf("strlen(B)=%d\n",strlen(B));
}

但是输出的结果是
strlen(A)=7
strlen(B)=4
A的长度是7,不知道为什么,但是如果把A[]改为A[5](把’\0’计入在内了) 则结果为
strlen(A)=4
strlen(B)=4
如果故意把A[]改为A[4](正确的应该是A[5],故意不把’\0’加进去)则结果又变成了
strlen(A)=7
strlen(B)=4
如果我代码中加入打印每个字符

#include"stdio.h"
#include"string.h"
int main()
{
   char A[4]={'a',' ','c','d'};
   char B[]="a cd";
   printf("strlen(A)=%d\n",strlen(A));
    printf("strlen(B)=%d\n",strlen(B));
   for(int i=0;i<strlen(A); ++i)
   {
       printf("%c\n",A[i]);
   }
}

然后输出的
strlen(A)=4
strlen(B)=4
又是正确的了。
由此可见这可能是编译器的原因。
所以当我们在定义一个字符数组时,尽量加上下标的字符长度。

而用*A定义字符串就不会出现这种现象

所以在定义字符串时尽量用指针,定义字符数组时用A[],且下表最好不要缺省。

总结:貌似一切求字符串或字符数组的长度问题时,其长度都不包括 ‘\0’

猜你喜欢

转载自blog.csdn.net/yangbomoto/article/details/76890862