带有额外0x0的c++字符串
c++ string with extra 0x0?
我有一个奇怪的字符串与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
,如何使a
和b
相等?
概要:谢谢你的回复。我想现在问题对我来说很清楚了。来自Crypto++库的外部func
在字符串中返回一个额外的null字符,并且在string中,长度被单独跟踪。我需要做的是std::string(a.c_str())
从std::string
中删除尾空的简单方法:
if (!str.empty() && *str.rbegin() == 0)
str.resize(str.size() - 1);