如何逐字符读取文件,然后将它们存储到动态分配的数组中

时间:2019-03-01 10:50:05

标签: c arrays file

我有一个用C语言编写的学校项目,但有一个问题。我已经阅读了有关该问题的几乎所有主题,但是没有一个主题回答了我的问题,这就是为什么我寻求您的帮助... 我创建了一个结构,其中有一个指向字符数组的指针,并且有一个包含int和char的文件。

我想创建一个函数read_file,它将逐个字符地读取此文件,然后将它们存储到动态分配的数组中。但是首先我不知道如何逐个字符地读取文件,其次我不知道如何将这些字符放入数组中。

这是我到目前为止写的内容:

char* main(int argc, char *argv[]){
  FILE *p_file;
  char* code = malloc(1000*sizeof(char));
  char* p = code;
  p_file = fopen(argv[1],"rb+");
  while((ch=getc(p_file)) != EOF){
    *p++ = (char)fgetc(p_file);
  } 
  return code;
  free(code);

您能帮我照亮一下还是给我发送一个可能有用的链接?

谢谢!

2 个答案:

答案 0 :(得分:0)

检查有关读取的fread()和/或fgetc()文档。 关于数组,这取决于它是否是一个char数组(例如char arr [100]),那么您可以在继续阅读它们时将它们放在其中。希望这可以帮助。

答案 1 :(得分:0)

下面经过测试的代码。

包括标题:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

功能:

char* readFile(const char const* filename)
{
    FILE* fh = fopen(filename, "r");
    char* result = NULL;

    if (fh != NULL) {
        size_t size = 1;

        while (getc(fh) != EOF) {
            size++;
        }

        result  = (char*) malloc(sizeof(char) * size);
        fseek(fh, 0, SEEK_SET); //Reset file pointer to begin

        for (size_t i = 0; i < size - 1; i++) {
            result[i] = (char) getc(fh);
        }

        result[size - 1] = '\0';
        fclose(fh);
    }

    return result;
}

用法:

char* result = readFile("test.txt");

if (result != NULL) {
    printf("%s\n", result);
    free(result);
}

检查此内容:
https://en.cppreference.com/w/c/io/fgetc
https://en.cppreference.com/w/c/memory/malloc

希望获得帮助。