gpt4 book ai didi

c++ - 为什么 Mac OSX pipe(2) 中的 read(2) 将 0x7F 插入到字符串中?

转载 作者:行者123 更新时间:2023-11-28 06:40:38 25 4
gpt4 key购买 nike

我正在打开一个通往子进程的管道,并通过该管道读回其标准。

如果我只读取一次,就像我在原型(prototype)中所做的那样,它会正确返回字符串(下面的 BEFORE 情况)。

如果我循环以读取所有可能大小的输出,我会在字符串末尾加上终止符 0x7F (ASCII DEL),这会搞砸我的测试。

这仅在运行 Mac OSX 10.9.4、Clang 3.4 的笔记本电脑上失败。

它在 FreeBSD 10.0、Clang 3.3 上正常工作(没有 0x7F)。

之前的代码:

char buffer[1024];
read(pipeFd, buffer, sizeof(buffer));
string output = buffer;

失败的代码:

char buffer[1024];
ssize_t count;
string output;

while ((count = read(pipe, buffer, sizeof(buffer))) != 0) {
if (count < 0) {
return false;
}
output.append(buffer);
}
return true;

我做错了什么?这是与 Mac 相关的错误吗?

最佳答案

我建议您的字符串没有正确终止。

您可以执行 buffer[count] = 0;(但要确保您的缓冲区比您正在读取的元素多一个,所以 read(pipe, buffer, sizeof(buffer) -1) 将是必需的。

或者使用带有大小的append:

output.append(buffer, count);

0x7f 可能只是超出输入一个位置的一些随机垃圾 - 你很幸运,它是一个字符,而不是六个或一兆字节的“额外”。 [或者它不只是读取内存的末尾并崩溃]

关于c++ - 为什么 Mac OSX pipe(2) 中的 read(2) 将 0x7F 插入到字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com