C++ strlen显示错误的数组元素数
结果是31,我不知道为什么会发生这种情况在C样式字符串上需要nul终止符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
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();