c++ - 转换为 char* C++ 后丢失字符串数据

标签 c++ string type-conversion

我目前正在学习如何使用 libcurl 开发 HTTP 代理。在我成功获得 HTTP 响应后,我将它们写入一个字符串,然后再使用回调函数进行进一步处理。在进一步的处理函数中,我首先需要将这些字符串转换为 char*,这导致了丢失数据的问题,因为那些包含 png 和 gif 等图像数据的 HTTP 响应。而其余的 HTTP 响应包含纯文本数据,如 HTML 和 css 工作正常。

我的疑问和问题是为什么c_str()函数在转换过程中消除了那些不可读的数据,比如图像数据?有什么办法可以解决这个丢失数据的问题吗?

代码: char* sData_source_ ;

void Client::send(string msg)
{
   sData_source_ = (char*)msg.c_str();
   cout << "Your string is " << strlen(sData_source_)<<endl; 
}

输出: 发送 HTTP 响应[608]: 自由度:9 HTTP/1.1 200 正常 日期:2012 年 8 月 29 日星期三 00:58:25 GMT 服务器:Apache/2.2.16 (Debian) 最后修改时间:2012 年 8 月 28 日星期二 18:34:36 GMT ETag:“13e4735-136-4c857b1b54700” 接受范围:字节 保持事件:超时=15,最大值=99 内容类型:图片/png 内容长度:310 连接:保持事件状态 �PNG

IHDR�o�|d�IT pHYs � �B�4�tEXtSoftwareMacromedia Fireworks MX��*$tEXtCreation Time12/06/04g�m�IDATx��1�E�u�r -��R)��]X֚��w��<Ѱ��1F���������� tX��!��Z��=:$TJ��{��3��CRgb:$v4v��Cb� ��(����B��!tH��L��[k��_wx8/:,@������ xQ�2]�|�IEND�B`� 你的字符串是 306

注意:你们可以从上面的输出中观察到,最初的 HTTP 响应总长度为 608 字节。但是用c_str()函数转换后变成了306。

谢谢并期待有人回复。 :D

最佳答案

看起来您正在尝试将二进制文件视为字符串。

一旦遇到\0 终止符,字符串就会结束。请考虑以下事项:

const char* foo = "abc\012345667";
int length = strlen(foo);

长度3,因为原始字符串在3个字符后被终止

关于c++ - 转换为 char* C++ 后丢失字符串数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12175587/

相关文章:

java - byte[] 到 int,反之亦然

c++ - llvm ir 回到人类可读的源语言?

python - 使用 python 打印图案的替代解决方案

python - 如何通过pandas中的集合操作从列中提取多个子字符串?

c# - Codedom 和字符串处理

c - 为什么这个显式转换的结果与隐式转换的结果不同?

java - 2字节短java

c++显式类型转换给出了错误的答案

c++ - 如何防止 ostringstream(或类似的)在不设置精度的情况下输出科学记数法

c++ - 如何在C++中从头到尾写入文件