此问题在此处已有答案:
How do you construct a std::string with an embedded null?(11个答案)
23小时前关闭。
int main() {
string s = "Hello\t\0world";
string k = "";
for(auto i =0; i<s.length();i++){
switch(s[i]){
case '\t':
k = k + "\\t";
break;
case '\0':
k = k + "\\0";
break;
default:
k = k + s[i];
}
}
cout<<k;
return 0;
}
空字符串结束后,无法得到完整的解。
输出应为:Hello\t\0world
2条答案
按热度按时间yws3nbqq1#
问题出在
s
的初始化中。初始化将在字符串中嵌入空字符时停止。您需要分三步进行初始化:
n6lpvg4x2#
所提供代码的问题在于,空字符
'\0'
(表示C样式字符串的结尾)不是可打印字符。因此,当字符串
"Hello\t\0world"
存储在变量s
中时,它将被视为仅包含以'\0'
结尾的"Hello\t"
的字符串。因此,
s
的构造将在此结束,字符串"world"
的其余字符将被忽略。要输出整个文本
"Hello\t\0world"
,可以使用**cout.write()
**方法,该方法将指定数量的字节写入输出流。