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…那么你修复了你的代码了吗???不要一直更改问题中的代码,因为答案不再有意义。你更改了代码,但行为根本没有改变?