我试图在一个std::stringC++中附加一个HTTP响应的sentinel("\ r \n\r \n").但是,当我附加数据时,我得到了一大堆额外的东西:^[[?62;9;c^[[?62;9;c[然后我的程序终止.然后它将以下内容写入命令行:62;9;c62;9;c62;9;c62;9;c62;9;c62;9;c.这似乎只发生在.jpg / .gif文件中,我已经测试并验证了使用text和html文件的相同方法.
上下文是我试图将此字符串写入套接字,使用string.c_str().在读完所需的文件后,我已经追踪了额外的字符到我做的追加操作.我认为这会导致我的计算内容长度失效,导致崩溃.所以我只需要知道为什么这些额外的东西最终会在我身上string.c_str()?
编辑:这是我的文件阅读代码.(忘了粘贴它)(BUFFER_LENGTH #defined为1024)
int fd = open(filename.c_str(),O_RDONLY);
int bytesRead = 0;
char buffer[BUFFER_LENGTH];
string content = "";
while((bytesRead = read(fd, buffer, BUFFER_LENGTH)) !=0)
{
if(bytesRead==-1)
{
if(errno == EINTR)
{
printf("\nERRONO");
continue;
}
else
{
printf("\nclosing fd");
close(fd);
}
}
content+= buffer;
}
close(fd);
//Printing content.c_str() here gives right value
content += "\r\n\r\n";
//Printing content.c_str() here gives the gibberish, and crash when I write it to the socket.
return content;
Run Code Online (Sandbox Code Playgroud)
这是我如何写入套接字(fdToUse是套接字):
write(fdToUse, response->fullResponse.c_str(), response->fullResponse.length());
close(fdToUse);
Run Code Online (Sandbox Code Playgroud)
^[[?62;9;c是一个VT100控制序列,报告终端的状态(DA1).您输出到终端的GIF/JPG中的二进制数据可能包含导致本地终端以意外方式响应的序列.
您正在查看结果的具体顺序记录在http://www.xfree86.org/current/ctlseqs.html(搜索"主要DA"),但详细信息与此处没有直接关系.重要的是,当您的终端在输入上看到某个序列时,它会产生一些输出.
content+= buffer;
Run Code Online (Sandbox Code Playgroud)
应该:
content.insert( content.size(), buffer, bytesRead );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2076 次 |
| 最近记录: |