在以下代码中:
...
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个随机字符?
答案 0 :(得分:7)
当您编写长度为strlen(whatever)
的邮件时,不的邮件会包含终止NUL字符。因此,另一端出现的是不一个C字符串,而只是一个字符集。
跟随内存中的字符集合完全取决于从管道中读取它们之前的内容。因为它不是C字符串(除非偶然发生已经包含NUL的内存位置可能发生意外),否则不应将其传递给printf
且无限制{{1}格式说明符。
这里有两种可能性。第一种是将NUL字符与数据一起发送,例如:
%s
或(可能更好)使用write (fd[1], message, strlen(message) + 1);
的返回值,它告诉你读取了多少字节,如:
read