Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ strlen显示错误的数组元素数_C++ - Fatal编程技术网

C++ strlen显示错误的数组元素数

C++ strlen显示错误的数组元素数,c++,C++,结果是31,我不知道为什么会发生这种情况在C样式字符串上需要nul终止符 void main() { char str1[4] = { 'A','B','C','D' }; char str2[3] = { 'A','B','D' }; cout << strlen(str2) } 按标准,字符数组中的C字符串是终止字符为“\0”的数组。 指定如下字符串时: #include <iostream> #include <cstring> int ma

结果是31,我不知道为什么会发生这种情况

在C样式字符串上需要nul终止符

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


}

按标准,字符数组中的C字符串是终止字符为“\0”的数组。 指定如下字符串时:

#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';
}
这相当于:

char* a = "hello";
这种弦与strlen和类似的strcpy、strthis、strhat一起工作

<>在C++中,你应该使用你所得到的包含字符串的类型字符串。它是一个类,您可以使用该类的函数

char a[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
当您对数组执行strlen操作(实际上是第一个字符的地址)时,strlen函数会在内存中迭代,直到找到\0为止,即使它从数组中出来并进入内存中的任何其他数据。
您得到的31意味着您的strlen在最终遇到\0字节之前在内存中的大小是字符大小的31倍。

str2的末尾没有空终止符,因此strlen函数会在内存中运行,直到找到为止。我想您需要的是std::size,而不是strlen。strlen中的str代表字符串,和表示以C样式nul结尾的字符串。字符串必须以“\0”结尾。此外,main必须返回int,而不是void。您是否阅读了手册中有关strlen如何工作的说明?
#include <string>
... 
std::string a = "hello";
int size = a.size();