【发布时间】:2014-08-18 15:22:41
【问题描述】:
在下面的代码中,我试图用'\0' 替换第一个字符。
我希望它打印一个空字符串,但在输出中它只是省略了它并显示其余字符。
int main()
{
string str;
cin >> str;
str[0] = '\0';
cout << str << "\n";
return 0;
}
输出:
testing
esting
如何在 C++ 中终止字符串?
PS:我正在尝试这种在另一个问题中终止字符串的方法,我需要在其中终止。
【问题讨论】:
-
NULL 是
#define用于语言C中的 Null 指针。它有时也用作C++中的指针值,但这不是共识。但 NULL 绝不是字符常量。 -
如果您尝试
str.c_str(),它可能会给出您想要的输出,但我不建议以这种方式使用字符串。 -
在尝试操纵
std::string的内部时要非常小心。内存通常以连续的方式布局(IIRC 因为std::string.c_str()的要求,但您不应过多假设容器(std::string)如何操作和使用该内存。不建议尝试在容器不知情的情况下操作原始内容。在必要时使用std::string()方法,有很多方法,在需要时使用标准算法;它们可以很好地协同工作。 -
@Niall 您通常无法操纵
std::string的内部结构,但是您可以像他所做的那样通过对字符串进行索引来修改特定字符,或者通过取消引用有效的迭代器,然后也是许多允许显式操作的非常量成员函数。 -
@Niall:C++11 要求
std::string是连续的。但即使在 C++03 中,完全可以接受 OP 正在做的事情。您可以修改字符串中的任何字符(即任何0 ≤ i < str.size()的str[i] = anyChar),而根本不会“破坏”字符串。 FWIW,operator[]是在std::string中故意添加的一个方法,以便人们可以做这样的事情。