64,637
社区成员
发帖
与我相关
我的任务
分享
char *web_data = new char[original_web_data.length() + 1];
int index = 0;
while (1)
{
memcpy(input_data_tmp, (const void *)(original_web_data.c_str() + index), 16);
fout << input_data_tmp;
if ((index + 16) > original_web_data.length())
{
break;
}
index += 16;
}
char const * p = original_web_data.data();
或者
std::string copy = original_web_data;
char const * p = copy .data();
ofstream要用二进制模式打开。
char const * p = original_web_data.data();
或者
std::string copy = original_web_data;
char const * p = copy .data();
ofstream要用二进制模式打开。 [/quote]
string里面的处理方式应该也是也遇到这种问题的。
ofstream当然已经用ios::binary了,要不然开始的16个bytes就不是这样的了。
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *test = "zeng\0raoli";
string str = test;
int str_length = str.length();
cout << "str : " << str << endl;
cout << "str_length : " << str_length << endl;
char *test2 = new char[str_length + 1];
memset(test2, 0, str_length + 1);
memcpy(test2, str.c_str(), str.length());
test2[str_length] = '\0';
cout << "test2 : " << test2 << endl;
// 使用string::c_str拷贝到char*
char test3[16];
memset(test3, 0, 16);
memcpy(test3, str.c_str(), 10);
for (int i = 0; i < 10; i++)
{
cout << test3[i];
}
// 使用char*拷贝到char*
char test4[16];
memset(test4, 0, 16);
memcpy(test4, test, 10);
// 直接输出test4
cout << test4 << endl;
// 逐个输出test4
for (int i = 0; i < 10; i++)
{
cout << test4[i];
}
cout << "\r\n";
if (test2)
{
delete[] test2;
test2 = NULL;
}
return 0;
}