gpt4 book ai didi

c++ - 从管道读取时的随机字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:13 25 4
gpt4 key购买 nike

在下面的代码中:

    ...
char *message = "This is the message!";
...

printf("Writing to file descriptor FD[%i] \n", fd[1]);
write( fd[1], message, strlen(message));
printf("Reading from file descriptor FD[%i] \n", fd[0]);
read( fd[0], buffer, strlen(message));
printf("Message from FD[%i] : \"%s\" .\n", fd[0], buffer);

我得到以下输出:

 "This is the message!���" .

但是如果我删除“!”根据我的消息,输出没有随机字符...知道为什么我会出现这 3 个随机字符吗?

最佳答案

当您编写长度为 strlen(whatever) 的消息时,包含终止 NUL 字符。因此,在另一端出现的不是 C 字符串,而是字符的集合。

内存中字符集合之后的内容完全取决于您从管道中读取它们之前的内容。因为它不是 C 字符串(除了可能的意外,如果后面的内存位置恰好 已经 包含 NUL),你不应该将它传递给 printf %s 格式说明符。

这里有两种可能性。第一种是将 NUL 字符与数据一起发送,例如:

write (fd[1], message, strlen(message) + 1);

或者(可能更好)使用 read 的返回值,它会告诉您读取了多少字节,例如:

int sz = read (fd[0], buffer, sizeof(buffer));
// should probably check sz here as well.
printf ("Message from FD[%i] : \"%*s\" .\n", fd[0], sz, buffer);

关于c++ - 从管道读取时的随机字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115834/

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