C读取文件和打印缓冲区

大卫

我正在学习C,并且一直在尝试读取文件并打印刚刚读取的内容。我打开文件,需要调用另一个函数来读取并返回刚刚读取的句子。如果一切正常,我的函数将返回1,否则返回0。我一直在尝试使其工作一段时间,但我真的不明白为什么我无法设法赋予line它价值。在主要情况下,它总是打印(空)。

项目的结构必须保持不变,我绝对必须使用openread不要翻脸,或者别的什么……如果有人可以向我解释这太棒了。

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

#define BUFF_SIZE 50

int     read_buff_size(int const fd, char **line)
{
    char    buf[BUFF_SIZE];
    int     a;

    a = read(fd, buf, BUFF_SIZE);
    buf[a] = '\0';
    *line = strdup(buf);
    return (1);
}

int     main(int ac, char **av)
{
    char    *line;
    int     fd;

    if (ac != 2)
    {
        printf("error");
        return (0);
    }
    else
    {
        if((fd = open(av[1], O_RDONLY)) == -1)
        {
            printf("error");
            return (0);
        }
        else
        {
            if (read_buff_size(fd, &line))
                printf("%s\n", line);
        }
        close(fd);
    }
}
乌鸦人

这里:

char    buf[BUFF_SIZE];
int     a;

a = read(fd, buf, BUFF_SIZE);
buf[a] = '\0';

如果字符数多于BUFF_SIZE可供读取的字符数,则将完全填满数组,并且buf[a]将超出数组末尾。您应该将的大小增加buf一个字符:

char buf[BUFF_SIZE + 1];

或者,从逻辑上给定您的宏名称,少读一个字符:

a = read(fd, buf, BUFF_SIZE - 1);

您还应该检查来自strdup()的返回read()错误,因为它们都可能失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++读取缓冲区中的整个文件

来自分类Dev

在纺织品的“ beg”和“ end()”括号内查找文本,然后读取/打印到缓冲区中。IN C

来自分类Dev

读取文件缓冲区通过

来自分类Dev

C函数,打印到缓冲区

来自分类Dev

从音频缓冲区和视频缓冲区C ++ Windows构造mp4文件

来自分类Dev

Emacs:求值(缓冲区文件名)与读取变量缓冲区文件名?

来自分类Dev

C ++:将读取的二进制文件存储到缓冲区

来自分类Dev

C ++-从具有相同功能的文件或内存缓冲区中读取

来自分类Dev

C-函数read(文件,缓冲区,要读取的字节)破坏字符串

来自分类Dev

C二进制文件读取缓冲区声明位置差异

来自分类Dev

在C中获取char缓冲区(从读取的文件)中的值数

来自分类Dev

如何“说”和“打印”到缓冲区中?

来自分类Dev

直接从文件读取到BufReader或Cursor的基础缓冲区

来自分类Dev

程序集Mips从文件和缓冲区读取文本

来自分类Dev

从文件读取时如何停止堆栈缓冲区溢出?

来自分类Dev

具有动态缓冲区的Windows读取文件

来自分类Dev

从文件读取并放入二维缓冲区

来自分类Dev

使用缓冲区读取JPEG文件:segfault

来自分类Dev

使用Python读取协议缓冲区文件

来自分类Dev

从缓冲区读取 csv 文件得到了 EmptyDataError?

来自分类Dev

NodeJS缓冲区-读取小端缓冲区

来自分类Dev

读取控制台缓冲区/输出C ++

来自分类Dev

在C中如何读取超出缓冲区末尾的内容?

来自分类Dev

读取控制台缓冲区/输出C ++

来自分类Dev

读取C中缓冲区的特定部分

来自分类Dev

C recv()未在缓冲区中读取

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

c + +和DX11中的动态常量缓冲区或动态顶点缓冲区

来自分类Dev

使用操作系统和磁盘缓冲区写入文件后,为什么读取操作快得多?

Related 相关文章

  1. 1

    C ++读取缓冲区中的整个文件

  2. 2

    在纺织品的“ beg”和“ end()”括号内查找文本,然后读取/打印到缓冲区中。IN C

  3. 3

    读取文件缓冲区通过

  4. 4

    C函数,打印到缓冲区

  5. 5

    从音频缓冲区和视频缓冲区C ++ Windows构造mp4文件

  6. 6

    Emacs:求值(缓冲区文件名)与读取变量缓冲区文件名?

  7. 7

    C ++:将读取的二进制文件存储到缓冲区

  8. 8

    C ++-从具有相同功能的文件或内存缓冲区中读取

  9. 9

    C-函数read(文件,缓冲区,要读取的字节)破坏字符串

  10. 10

    C二进制文件读取缓冲区声明位置差异

  11. 11

    在C中获取char缓冲区(从读取的文件)中的值数

  12. 12

    如何“说”和“打印”到缓冲区中?

  13. 13

    直接从文件读取到BufReader或Cursor的基础缓冲区

  14. 14

    程序集Mips从文件和缓冲区读取文本

  15. 15

    从文件读取时如何停止堆栈缓冲区溢出?

  16. 16

    具有动态缓冲区的Windows读取文件

  17. 17

    从文件读取并放入二维缓冲区

  18. 18

    使用缓冲区读取JPEG文件:segfault

  19. 19

    使用Python读取协议缓冲区文件

  20. 20

    从缓冲区读取 csv 文件得到了 EmptyDataError?

  21. 21

    NodeJS缓冲区-读取小端缓冲区

  22. 22

    读取控制台缓冲区/输出C ++

  23. 23

    在C中如何读取超出缓冲区末尾的内容?

  24. 24

    读取控制台缓冲区/输出C ++

  25. 25

    读取C中缓冲区的特定部分

  26. 26

    C recv()未在缓冲区中读取

  27. 27

    读取c中的输入后如何清除缓冲区?

  28. 28

    c + +和DX11中的动态常量缓冲区或动态顶点缓冲区

  29. 29

    使用操作系统和磁盘缓冲区写入文件后,为什么读取操作快得多?

热门标签

归档