std :: string.append("\ r \n\r \n")添加c62; 9; c62; 9; 到字符串结束?

Cor*_*son 3 c++ sockets

我试图在一个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)

dus*_*uff 6

^[[?62;9;c是一个VT100控制序列,报告终端的状态(DA1).您输出到终端的GIF/JPG中的二进制数据可能包含导致本地终端以意外方式响应的序列.

您正在查看结果的具体顺序记录在http://www.xfree86.org/current/ctlseqs.html(搜索"主要DA"),但详细信息与此处没有直接关系.重要的是,当您的终端在输入上看到某个序列时,它会产生一些输出.


K-b*_*llo 6

content+= buffer;
Run Code Online (Sandbox Code Playgroud)

应该:

content.insert( content.size(), buffer, bytesRead );
Run Code Online (Sandbox Code Playgroud)