strncpy在复制含有多个\0的字符串的时候,会产生截断,因为strncpy在读取源字符串的时候,遇到了\0,函数会认为该字符串已经结束了,然后会向目标字符串内填充\0。
char buffer[100] = "ak\0jl";
for (int i = 0; i < 5; i++)
{
cout << buffer[i] << endl;
}
char des[100]="";
strncpy_s(des, buffer, 5);
for (int i = 0; i < 5; i++)
{
cout << des[i] << endl;
}
des数组中没有buffer的\0后的内容
解决:
使用memcpy
memcpy是直接拷贝内存,就不会产生这种问题
char buffer[100] = "ak\0jl";
for (int i = 0; i < 5; i++)
{
cout << buffer[i] << endl;
}
char des[100]="";
memcpy(des, buffer, 5);
for (int i = 0; i < 5; i++)
{
cout << des[i] << endl;
}
string中含有\0的情况
当想要将string转为char类型,且string中出现了\0
1、直接使用string的data
string tmp="aslkdjf\0sdklfa";
tmp.data();
tmp.data返回的是一个char*
2、使用memcpy
3、使用vector
string tmp="kjhasdfhk\0asedf";
std::vector<char> charVec(tmp.begin(), tmp.end());
char* data = charVec.data();