c++ 如何在CPP中将空字符打印为字符?[duplicate]

irtuqstp  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(146)

此问题在此处已有答案

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

yws3nbqq

yws3nbqq1#

问题出在s的初始化中。初始化将在字符串中嵌入空字符时停止。
您需要分三步进行初始化:

string s = "Hello\t";  // First part of string
s += '\0';  // Add the terminator character
s += "world";  // Add the second part of the string
n6lpvg4x

n6lpvg4x2#

所提供代码的问题在于,空字符'\0'(表示C样式字符串的结尾)不是可打印字符。
因此,当字符串"Hello\t\0world"存储在变量s中时,它将被视为仅包含以'\0'结尾的"Hello\t"的字符串。
因此,s的构造将在此结束,字符串"world"的其余字符将被忽略。
要输出整个文本"Hello\t\0world",可以使用**cout.write()**方法,该方法将指定数量的字节写入输出流。

相关问题