【发布时间】:2014-11-24 23:06:20
【问题描述】:
我正在尝试复制包含“\0”的数据。我正在使用 C++ 。 当研究结果是否定的时,我决定编写自己的函数来将数据从一个 char* 复制到另一个 char*。但它不会返回想要的结果! 我的尝试如下:
#include <iostream>
char* my_strcpy( char* arr_out, char* arr_in, int bloc )
{
char* pc= arr_out;
for(size_t i=0;i<bloc;++i)
{
*arr_out++ = *arr_in++ ;
}
*arr_out = '\0';
return pc;
}
int main()
{
char * out= new char[20];
my_strcpy(out,"12345aa\0aaaaa AA",20);
std::cout<<"output data: "<< out << std::endl;
std::cout<< "the length of my output data: " << strlen(out)<<std::endl;
system("pause");
return 0;
}
结果在这里:
我不明白我的代码有什么问题。
提前感谢您的帮助。
【问题讨论】:
-
您的函数几乎可以正常工作(除了对
arr_out的最后一次访问超出范围)。但是std::cout和strlen都将\0解释为字符串终止符。 -
for (blah) { cout << out[blah]; }但我不知道你想让\0出现什么...... -
char out[20]; std::copy_n("12345aa\0aaaaa AA", 20, out); -
为什么不使用
std::string或std::vector<char>?这将是 C++ 中常用的处理方式。 -
我刚刚注意到下面 Chris 的类似回答。他是对的-零字节和 memcpy() 没有问题-但是当您将 char* 传递给“cout