繁体   English   中英

为什么printf不使用read()函数显示放入缓冲区的数据?

[英]Why doesn't printf display data put in a buffer with the read() function?

我创建了一个具有以下内容的文件: 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;
}

我要求read函数一个个地检索字节,而chars是一个字节的大小,尽管它可以工作。 但是执行时控制台上没有任何显示。

有什么线索吗?

每次read调用都会将字符放在buf的开头,但是您并不总是打印出buf那一部分。

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

您的for循环条件有点倒转。 您需要交换条件的第二部分和第三部分。 你有:

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

但是,由于i++在第一次迭代期间的值为0 ,因此由于条件为假,因此永远不会进入循环。

它可能应该是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM