strlen 显示数组元素的数量错误
strlen show wrong the number of array's elements
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 倍。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 程序崩溃并显示"std::out_of_range"错误
- 显示错误输出的简单数组排序程序
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 在链表中的第 n 位插入显示分割错误
- 为什么当 vector 为空时会显示运行时错误?
- 查找显示链表时出现的错误
- SDL 映像:无法打开映像,仅显示错误消息
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- 与clang++一起使用的VS代码在构建良好的C++文件中显示错误
- 修复转换 IP 时inet_ntoa中的 Endianess 错误显示反转值
- g 编译选项,带有-STD = C 14编译错误显示Werror = C 11 -Compat
- 加载图像约500次后,此错误显示在Visual Studio Qimage:不记忆,返回空图像
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- 当整数变量用于在 c++ 中声明数组大小时,错误显示为"Expression must have a const value"
- 在Qt错误显示:"Fault Module Name: Qt5Cored.dll"在win 7和调试时:"segmentation fault"在CentOS Linux和Win 7中