c++中append函数会追加\0么
c++中append函数能追加\0么?
char pszData[4] = { 'a', '\0', 'c', '\0' };
string strData;
strData.append(pszData, 0, 4);
cout<<strData<<endl;
这样能不能把\0给append进去。
------解决方案--------------------
string是另外单独记录串的长度的, 只是为了跟C字符串兼容所以会在实际存储的时候在串尾加'\0'
从这个逻辑看string里应该是可以存'\0'的.
我在我这里试了一下:
输出的结果是:
123abc44
9
字符串长度是9, 说明包含的push_back进去的'\0'
但输出只有8个字符, 因为'\0'不是一个可显示字符, 所以不会显示在屏幕上.
因此, 结论应该是 string里可以push_back '\0'
------解决方案--------------------
现象是对的, 但这个是由于C++重载造成的
string& append (const string& str);
string& append (const char* s);
你的append('\0')调用的是第二个版本,
对了, 我这里append('\0')是会运行出错的, 用append("\0")才可以.
既然接收的是 char *, 就应该按C风格的字符串来, "\0"就是空串, 当然什么也不append.
如果你这样
string tmp;
tmp.push_back('\0');
再往你的string里append(tmp) 你就会发现'\0'被append进去了.
char pszData[4] = { 'a', '\0', 'c', '\0' };
string strData;
strData.append(pszData, 0, 4);
cout<<strData<<endl;
这样能不能把\0给append进去。
------解决方案--------------------
string是另外单独记录串的长度的, 只是为了跟C字符串兼容所以会在实际存储的时候在串尾加'\0'
从这个逻辑看string里应该是可以存'\0'的.
我在我这里试了一下:
#include <iostream>
#include <string>
using namespace std;
int main(){
string a("123abc");
a.push_back('4');
a.push_back('\0');
a.push_back('4');
cout<<a;
cout<<"\n"<<a.size()<<"\n";
return 0;
}
输出的结果是:
123abc44
9
字符串长度是9, 说明包含的push_back进去的'\0'
但输出只有8个字符, 因为'\0'不是一个可显示字符, 所以不会显示在屏幕上.
因此, 结论应该是 string里可以push_back '\0'
------解决方案--------------------
现象是对的, 但这个是由于C++重载造成的
string& append (const string& str);
string& append (const char* s);
你的append('\0')调用的是第二个版本,
对了, 我这里append('\0')是会运行出错的, 用append("\0")才可以.
既然接收的是 char *, 就应该按C风格的字符串来, "\0"就是空串, 当然什么也不append.
如果你这样
string tmp;
tmp.push_back('\0');
再往你的string里append(tmp) 你就会发现'\0'被append进去了.