我如何从C文件中读取行



我需要在文件中读取。文件的第一行是文件中的行数,它返回一个字符串数组,最后一个元素是NULL,表示数组的结束。

char **read_file(char *fname)
{
    char **dict;
    printf("Reading %sn", fname);
    FILE *d = fopen(fname, "r");
    if (! d) return NULL;
    // Get the number of lines in the file
    //the first line in the file is the number of lines, so I have to get 0th element
    char *size;
    fscanf(d, "%s[^n]", size);
    int filesize = atoi(size);

    // Allocate memory for the array of character pointers
    dict = NULL;   // Change this
    // Read in the rest of the file, allocting memory for each string
    // as we go.
    // NULL termination. Last entry in the array should be NULL.
    printf("Donen");
    return dict;
}

我放了一些注释,因为我知道这是我要做的,但我似乎不知道如何把它放在实际的代码中。

要解决这个问题,你需要做两件事中的一件。

  1. 以字符形式读取文件,然后转换为整数。
  2. 直接以整数形式读取文件

首先,使用free转换为字符数组,然后使用atoi转换为整数。

对于第二个,您将使用fscanf并使用指定的%d直接读入int变量;

fscanf不为您分配内存。给它传递一个随机指针只会带来麻烦。(我建议避免使用fscanf)。

问题码有一个缺陷:

char *size;
fscanf(d, "%s[^n]", size);

虽然上面的代码可以编译,但在运行时它不会像预期的那样工作。问题是fscanf()需要写入解析值的内存地址。虽然size是一个可以存储内存地址的指针,但它是未初始化的,并且在进程的内存映射中没有指向特定的内存。

下面可能是更好的替代:

fscanf(d, " %d%*c", &filesize);

查看我的剧透代码版本在这里

相关内容

  • 没有找到相关文章

最新更新