gpt4 book ai didi

c - 为什么 '\0'结束read()的输入?

转载 作者:行者123 更新时间:2023-11-30 19:11:29 25 4
gpt4 key购买 nike

下面的代码演示了如果输入中有\0,则后面的输入不会被读取。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
int fd;
int fd2;
char buf[200];
int n;
char fname[] = "/tmp/tst-perror.XXXXXX";
fd = mkstemp (fname);
fd2 = dup (fd);
write(fd2, "a", 2); // \0 is written out
write(fd2, "b", 1);
write(fd2, "\n", 1);
close (fd2);
lseek (fd, 0, SEEK_SET);
n = read (fd, buf, sizeof (buf));
printf("%.*s", (int) n, buf);
close (fd);
unlink (fname);
return 0;
}

输出是a

如果我们在第一个 write() 中使用 1 而不是 2,则输出为 ab。这是正确的行为吗?我在 read(2) 中没有找到任何相关内容。

最佳答案

输入\0字节之后读取。但是,%s printf 格式说明符需要以 \0 结尾的字符串。

尝试将 n 个字节写入 STDOUT_FILENO 或 1,而不是 printf:

write(1, buf, n);

关于c - 为什么 '\0'结束read()的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992352/

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