c - 动态字符缓冲区 C

标签 c linux malloc buffer

下面是我的代码的一部分,用于从文本文件中读取数据,去除 HTML 并仅打印出普通文本。这一切都很好,但我在阅读所有文本文件时遇到问题。我将如何阅读整个文本文件,了解我可能需要使用 malloc 但不确定如何使用。

int i, nRead, fd;
int source;
char buf[1024];
int idx = 0;
int opened = 0;

if((fd = open("data.txt", O_RDONLY)) == -1)
{
    printf("Cannot open the file");
}
else
{
    nRead = read(fd, buf, 1024);
    printf("Original String ");
    for(i=0; i<nRead; i++)
    {
        printf("%c", buf[i]);
    }

    printf("\nReplaced String ");

    for(i=0; i<nRead; i++)
    {
        if(buf[i]=='<') {
            opened = 1;
        } else if (buf[i] == '>') {
            opened = 0;
        } else if (!opened) {
            buf[idx++] = buf[i];
        }           
        //printf("%c", buf[i]);
    }
}
    buf[idx] = '\0';
    printf("%s\n", buf);
close(source);

最佳答案

如果您想阅读完整的文件,请执行以下操作:

  1. 打开文件
  2. 使用 fstat - 参见 fstat - 获得尺寸
  3. malloc 缓冲区,即 buffer = malloc(fileStats.st_size);
  4. 读取文件fread(buffer, fileStats.st_size, 1);
  5. 关闭文件。
  6. 随心所欲地玩缓冲区。

您可能希望将缓冲区大小加一以将空字符放入其中。

关于c - 动态字符缓冲区 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9444632/

相关文章:

c - 在 c 中将某些值映射到其他值的首选方法是什么?

c - 从用于写入的 FILE 副本中将数据读入数组

c - free功能好像不行

c - Realloc 最初有效,然后在多次重复后返回 null

linux - 如何通过比较文件名和文件夹名将文件复制到同名文件夹?

c - C 中的 Malloc、realloc 和返回指针

c - Ncurses 窗口缩放

c - 头文件中声明和#defines 的首选顺序

linux - Apache 目录被禁止

c++ - 如何将应用程序链接到依赖于另一个库的库?