【发布时间】:2020-10-28 15:50:02
【问题描述】:
#include <iostream>
#include <cstring>
int main()
{
auto l = std::strlen("123\0456\0");
std::cout << l << std::endl;
}
为什么这段代码的输出是 5?
我预计是 3 个。
这是一个在线版本进行测试: https://ideone.com/UQRKlV
【问题讨论】:
-
存在需要谨慎处理的现有代码,但是如果您尝试编译此代码,不会有任何问题。为什么你不能自己回答这个问题?
-
这里是现场版:https://ideone.com/UQRKlV
-
What will be the output of that code你编译并检查输出是什么?also please explain why?您是否尝试过找出可能导致未显示所有内容的原因? -
为什么会输出 5?当我将鼠标悬停在 VS 2019 中的字符串文字上时,它告诉我这是一个
const char[7] "123%6\000"。为什么\045被视为%,为什么它将字符\045组合在一起(而不是\0、\04或其他一些分块),以及为什么它以\000终止\0? -
到目前为止没有一个答案提到这一点,但是您可以使用
auto l = std::strlen("123\0" "456\0");构建您期望的字符串文字。