带有额外0x0的C++字符串?

3
我有一个包含0x0的字符串问题,能否有人帮助我?
string a = funxx();  // funxx is a external func from Crypto++ libary
string b = "test"

如果我打印出 a 和 b 的内容,它们都显示为“test”。
a.size() is: 5
b.size() is: 4
a.length() is: 5
b.length() is: 4

for( int i = 0; i < a.size(); i++ ) {
    cout << "0x" << hex << (0xFF & static_cast<byte>(a[i])) << " ";
}
print out: 0x74 0x65 0x73 0x74 0x0

for( int i = 0; i < b.size(); i++ ) {
    cout << "0x" << hex << (0xFF & static_cast<byte>(b[i])) << " ";
}
print out: 0x74 0x65 0x73 0x74

我的问题是,为什么a.length()a.size()返回5而不是4,如何使ab相等?
摘要: 感谢众多回复。我现在认为问题已经清楚了。来自Crypto++库的外部func在字符串中返回了一个额外的空字符,并且在字符串中单独跟踪长度。 我需要做的是std::string(a.c_str())

3
std::string 可以包含空字符,因为长度是单独跟踪的,这并不会有任何问题。 - chris
嗨,Praetorian。我无法发布funxx的内容,实际上它是我正在使用的外部库中的一个函数。 - user3893836
嗨 Chris,问题在于 a.compare(b) 不返回 0,这意味着相等。 - user3893836
@user3893836 您可以编辑您的问题,点击其下方的“编辑”按钮。在回复时使用“@<用户名>”,这样被提及的人就会收到通知。 - Praetorian
2
std::string(a.c_str()) - Bryan Chen
显示剩余8条评论
1个回答

1

std::string中删除尾随的空值的简单方法:

if (!str.empty() && *str.rbegin() == 0)
    str.resize(str.size() - 1);

1
使用 back()pop_back() - Potatoswatter
@Potatoswatter 我想过那个,但是试图避免使用仅限于C++11的特性。 - Mark Ransom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接