C++ 为什么管道在使用valgrind--xmlfd时会产生混乱的代码

C++ 为什么管道在使用valgrind--xmlfd时会产生混乱的代码,c++,encoding,valgrind,C++,Encoding,Valgrind,这是我的密码: int fd[2]; pipe(fd); fd[0]; fd[1]; std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd="; cmd += std::to_string(fd[1]); cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2"; system(cmd.c_str(

这是我的密码:

int fd[2];
pipe(fd);
fd[0];
fd[1];
std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
cmd += std::to_string(fd[1]);
cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
system(cmd.c_str());
close(fd[1]);
int n = 1024;
char buffer[1024];
std::string r;
while (read(fd[0], buffer, n) != 0) {
    r += buffer;
}
std::cout << r << std::endl;

这里是,我得到了混乱的代码,比如
我找到了解决方案,这是因为
int n=1024
太慢了,下面的代码可以工作:

int main(int argc, char **argv) {
    int fd[2];
    pipe(fd);
    fd[0];
    fd[1];
    std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
    cmd += std::to_string(fd[1]);
    cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
    system(cmd.c_str());
    close(fd[1]);
    int n = 4096;
    char buffer[n];

    std::string r;
    while (read(fd[0], buffer, n) != 0) {
        r += buffer;
    }
    close(fd[0]);
    std::cout << r << std::endl;
    return (0);
}
int main(int argc,char**argv){
int-fd[2];
管道(fd);
fd[0];
fd[1];
std::string cmd=“valgrind--leak check=yes--track origins=yes--xml=yes--xml fd=”;
cmd+=std::to_字符串(fd[1]);
cmd+=“/tmp/home/rorooco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2”;
系统(cmd.c_str());
关闭(fd[1]);
int n=4096;
字符缓冲区[n];
std::字符串r;
while(读取(fd[0],缓冲区,n)!=0){
r+=缓冲区;
}
关闭(fd[0]);
标准::cout
int main(int argc, char **argv) {
    int fd[2];
    pipe(fd);
    fd[0];
    fd[1];
    std::string cmd = "valgrind --leak-check=yes --track-origins=yes --xml=yes --xml-fd=";
    cmd += std::to_string(fd[1]);
    cmd += " /tmp/home/roroco/Dropbox/rbs/ro_cmds_global/c/valgrind/ex/ex2";
    system(cmd.c_str());
    close(fd[1]);
    int n = 4096;
    char buffer[n];

    std::string r;
    while (read(fd[0], buffer, n) != 0) {
        r += buffer;
    }
    close(fd[0]);
    std::cout << r << std::endl;
    return (0);
}