尽管我喜欢C和C++,但我还是忍不住在选择空终止字符串时不知所措:
std::basic_string模板进行了一些纠正,但是期望空终止字符串的普通字符数组仍然很普遍.这也是不完美的,因为它需要堆分配.这些事情中的一些最近比C更明显,因此C对于不了解它们是有意义的.然而,在C出现之前,有几个很平常.为什么选择空终止字符串而不是明显优越的长度前缀?
编辑:由于一些人在我的效率点上询问事实(并且不喜欢我已提供的事实),他们源于以下几点:
从下面的答案中,这些是空终止字符串更有效的一些情况:
以上都不像长度和连续那样常见.
在下面的答案中还有一个断言:
但这个不正确 - 它与null终止和长度前缀字符串的时间相同.(Null终止字符串只是在你希望新结束的地方粘贴一个空值,长度前缀只是从前缀中减去.)
在下面的代码中,我试图用第一个字符替换'\0'.
我希望它打印一个空字符串,但在输出中它只是省略了它并显示其余的字符.
int main()
{
string str;
cin >> str;
str[0] = '\0';
cout << str << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
testing
esting
Run Code Online (Sandbox Code Playgroud)
如何在C++中终止字符串?
PS:我正在尝试这种方法在一个不同的问题中终止字符串,我需要在其间终止.
只是想知道为什么会这样.我渴望了解更多有关低级语言的知识,而且我只是进入C语言的基础知识,这已经让我感到困惑.
像PHP这样的语言会在解释和/或解析时自动为null终止字符串吗?