0

我已经编写了以下代码,用于使用 read 函数从“file.dat”中读取

#include<stdio.h>

int main()
{
  int fd,xr;
  char b;
  if ((fd=open("file.dat"))==-1)
  {
    puts("Cannot open file");
    exit(0);
  }
  else
  {
    puts("File opened successfully");
  }
  puts("Trying to read");
  do
  {
    xr = read(fd,b,1);
    printf("%s",b);
  } while(xr!=-1)
  close(fd);
}

文件 file.dat 包含字符串“hello”,但我得到一些垃圾字符作为输出。错误是什么?

4

5 回答 5

3
  1. 传递地址bread()xr = read(fd,&b,1);

  2. 使用%c而不是%s打印:printf("%c",b);

于 2013-07-09T05:06:26.307 回答
0

您的printf()格式表明您正在尝试打印一个字符串,这要求您提供printf()一个指向字符的指针(字符序列被认为是空终止的)。但是,您只向 提供了一个字符printf(),然后将其视为指针。

于 2013-07-09T05:07:44.080 回答
0
  1. 试试: *printf("%c",b); *,因为您在 do-while{} 中读取了一个字符
  2. 并将 b 的地址传递给 read() 作为 xr = read(fd,&b,1);
于 2013-07-09T06:07:30.307 回答
0

尝试做:

printf("%c",b);

代替

printf("%s",b);

因为 %s 期望您传递一个以空字符结尾的字符数组(又名 C 字符串)

于 2013-07-09T05:08:04.237 回答
0

您正在给 printf 一个字符,但指定要打印一个字符串。因此,它会打印从 b 开始的所有字节,直到遇到终止的 null \0,这可能是您的“垃圾”

于 2013-07-09T05:08:07.110 回答