C 为什么';是否使用read()函数将printf显示数据放入缓冲区?

C 为什么';是否使用read()函数将printf显示数据放入缓冲区?,c,C,我创建了一个包含以下内容的文件:abc,我想读取它(仅使用read()函数,请不要建议另一个),并用此程序在控制台上显示它: #include <stdio.h> #include <unistd.h> #include <fcntl.h> int main() { int fd; char buf[3]; int size; fd = open("test",O_RDONLY); for (int i=0;i+

我创建了一个包含以下内容的文件:
abc
,我想读取它(仅使用
read()
函数,请不要建议另一个),并用此程序在控制台上显示它:

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

int main()
{

    int fd;
    char buf[3];
    int size;

    fd = open("test",O_RDONLY);

    for (int i=0;i++;i<3){

        size = read(fd,buf,1);    // Version 2 used buf+i
        printf("%c\n", buf[i]);

    }

    close(fd);

    return 0;
}
#包括
#包括
#包括
int main()
{
int-fd;
char-buf[3];
整数大小;
fd=打开(“测试”,仅限Ordu);

对于(int i=0;i++;i当前,您读取每个
read
buf
数组的第一个条目。
size=read(fd,buf,1);
替换为
size=read(fd,&buf[i],1);
,它应该可以工作。

当前,您读取每个
read
上的
buf
数组的第一个条目。
size=read(fd,buf,1);
替换为
size=read(fd,&buf[i],1)
,它应该可以工作。

每次调用
read
都会将字符放在
buf
的开头,但您并不总是打印
buf
的那部分,每次调用
read
都会将字符放在
buf
的开头,但您并不总是打印
buf
的那部分ode>循环条件有点颠倒。您需要交换条件的第2部分和第3部分。您有:

for (int i=0;i++;i<3)

但是我建议您使用
read()
的返回值来确定循环条件(如果您只想读取3个字节,则可能使用计数器)。

您的
for
循环条件有点颠倒。您需要交换条件的第2部分和第3部分。您有:

for (int i=0;i++;i<3)

但是我建议您使用
read()
的返回值来确定循环条件(如果您只想读取3个字节,则可能使用计数器)。

您意识到每次将一个字节读入偏移量零(
buf[0]
),但您尝试访问超出该值的元素,对吗?您甚至如何知道
read()
call read anything?您忽略了返回值。您甚至不知道文件是否已成功打开。另外,
read()
返回
ssize\t
,而不是
int
-它们不一样。@DavidHoelzer刚刚编辑了ok…那么你修复了你的代码了吗???不要一直更改问题中的代码,因为答案不再有任何意义。你更改了代码,但行为根本没有改变?你意识到每次你将一个字节读入偏移量为零(
buf[0]
),但您尝试访问超出此范围的元素,对吗?您如何知道您的
read()
调用读取任何内容?您忽略了返回值。您甚至不知道文件是否已成功打开。此外,
read()
返回
ssize\u t
,而不是
int
-这些都不一样。@DavidHoelzer刚刚编辑了OK…那么你修复了你的代码了吗???不要一直更改问题中的代码,因为答案不再有意义。你更改了代码,但行为根本没有改变?