管道输出后出现^ @符号(C ++)

时间:2012-05-23 04:05:40

标签: c++ pipe lcs

所以我在C ++中为“算法导论”一书(CLRS)实现了最长公共子序列算法,它运行良好,有点。当我做这样的事情时:

./lcs abc bc > OUTPUT

当我打开OUTPUT中的vim文件时,我看到了这一点:

2 bc^@

哪个是正确的,没有那个奇怪的^@符号。我做了一些谷歌搜索,这似乎是某种NULL字符?

我以前从未遇到过这个问题..有谁知道怎么摆脱它?

谢谢! -kstruct

修改的 这是打印的代码:

cout << lcsLength << " ";
    if (lcsLength > 0) cout << lcsString;

return 0;

lcsStringstd::string的位置。不确定这是否有帮助...

2 个答案:

答案 0 :(得分:4)

那是NUL(这是一个字符值,并被定义为全比特为零),而不是NULL(这是一个指针< / em>,几乎总是所有位为零,但不是必须的。)

我们需要确定看到你的代码,但最可能的原因是你打印了一个C字符串的另一个字节(它总是有NUL作为它的最后一个字节)比你应该拥有的。

答案 1 :(得分:4)

您已经显示了输出lcsString的代码,但与C样式字符串不同,std::string类型可以包含空字符,因为长度与字符串数据本身分开维护。

尝试添加以下内容以转储字符串的内容:

cout << "length of lcsString: " << lcsString.length() << endl;
cout << '"' << lcsString << '"' << endl;
for (int i = 0; i < lcsString.length(); ++i) {
    cout << hex <<  int(lcsString[i]) << " ";
}
cout << endl;

我打赌你会看到:

length of lcsString: 3
"bc "
62 63 0 

然后你需要找出你正在做的事情来创建(或修改)lcsString,使其最后包含一个空字符。