strlen显示错误的数组元素数

时间:2019-04-22 16:40:42

标签: c++

void main() {
char str1[4] = { 'A','B','C','D' }; 
char str2[3] = { 'A','B','D' }; 
cout << strlen(str2) 


}

结果是31,我不知道为什么会发生

2 个答案:

答案 0 :(得分:0)

您需要在C型字符串上使用nul终止符。

#include <iostream>
#include <cstring>
int main() {
  char str1[4+1] = { 'A','B','C','D', '\0' }; // same as = "ABCD"
  char str2[3+1] = { 'A','B','D', '\0' };  // same as = "ABD"
  std::cout << std::strlen(str2) << '\n';
}

答案 1 :(得分:0)

C字符串(如在chars数组中)通常是终止字符为'\ 0'的数组。 当您分配这样的字符串时:

    return !!(expression);

等效于:

char* a = "hello";

这种字符串适用于strlen和类似的字符串(strcpy,strthis,strthat)。

在C ++中,您应该使用包含字符串的字符串类型。这是一个类,您可以使用该类的功能

char a[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

对数组(实际上是第一个字符的地址)进行#include <string> ... std::string a = "hello"; int size = a.size(); 处理时,strlen函数会在内存中进行迭代,直到找到\ 0,即使它从数组中移出并进入其他数据在您的内存中。 您得到的31表示您的困惑在内存中的char大小持续了31倍,直到它最终遇到\ 0字节。