C++ 如果strlen在字符数组之间遇到空格,它会怎么做?

C++ 如果strlen在字符数组之间遇到空格,它会怎么做?,c++,strlen,C++,Strlen,为什么上面的输出是4,6?4,4不是正确答案吗?代码的行为未定义:strlen要求b必须在数组的边界内包含NUL字符 请注意,“”是一个空格,而不是NUL。strlen对空格的处理与任何其他非NUL字符没有区别 如果你写过 #include<iostream> #include<string.h> using namespace std; int main() { char b[] = {'a','b',' ','c'}; cout <<

为什么上面的输出是4,6?4,4不是正确答案吗?

代码的行为未定义:strlen要求b必须在数组的边界内包含NUL字符

请注意,“”是一个空格,而不是NUL。strlen对空格的处理与任何其他非NUL字符没有区别

如果你写过

#include<iostream>
#include<string.h>

using namespace std;

int main() {
    char b[] = {'a','b',' ','c'};
    cout << sizeof(b) << endl;
    cout << strlen(b) << endl;
    return 0;
}
<> P>将C++的B元素设为0,即NUL。

< P>你的代码显示了未定义的行为:

如果传递给strlen的参数未以NUL结尾,则不会定义strlen的行为

您似乎混淆了NUL字符和空格字符。

strlen遍历数组,直到遇到空字符。数组不包含空字符ASCII 0,但包含空格ASCII 32

斯特伦继续经过你的阵型。在内存中数组结束后两个字符的位置6处恰好存在一个空字符,因此字符串长度为6。此函数的后续执行可能会返回不同的值,因为数组外的内存内容未定义。它也可能崩溃

如果strlen遇到字符数组之间的空格,它会做什么

而所有其他答案根据您的代码样本,合法!!!提示由于数组中缺少空字符而导致的未定义行为,我将回答您最初的问题:


没有什么特别的,它会像计算任何其他字符一样计算空格,特别是,它不会像您假设的那样停止处理字符串…

hex 20-如果一个字符是pedant@Bathsheba-我想把Nax从他们的愤怒中解救出来:@Nax:注意ASCII非常,“与UTF-8非常不同。@讲故事者:我父亲已经离开家,刚刚以6000转的转速将911的离合器卸下。他匆匆忙忙地去了某个地方。Nax,奔向群山。@Nax-对于C实现来说,使用类似于芭丝谢芭所指的东西是完全有效的。我建议你删除十六进制,这真的有损于你的回答。为什么会出现空字符,两个字符后面的字符array@T.g只是偶然。数组在内存中占用大量字节。在堆栈上,很可能还有其他未初始化的对象!!!再次访问字节:纯属意外相反,您可能会遇到访问冲突,其中一个字节(第6个字节)碰巧包含空值,但它也可能包含任何其他值…@T.g数组被单位化后的数据读取:随机
char b[5]={'a','b',' ','c'};