簡體   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