strlen 显示数组元素的数量错误

strlen show wrong the number of array's elements

本文关键字:错误 显示 数组元素 strlen      更新时间:2023-10-16
void main() {
char str1[4] = { 'A','B','C','D' }; 
char str2[3] = { 'A','B','D' }; 
cout << strlen(str2) 

}

结果是31,我不知道为什么会这样

你需要在C 样式字符串上使用 nul-terminator。

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

C 字符串(如字符数组)的标准是终止字符为"\0"的数组。 当你分配一个这样的字符串时:

char* a = "hello";

它相当于:

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

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

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

#include <string>
... 
std::string a = "hello";
int size = a.size();

当你strlen数组(实际上是第一个字符的地址)时,strlen 函数会在内存中迭代,直到找到 \0,即使它从数组中消失并进入内存中的任何其他数据。 你得到的 31 意味着你的 strlen 在最终遇到 \0 字节之前,在你记忆中的大小是 char 的 31 倍。

相关文章: