如何在C中读取文件行并将其放入数组?

如何在C中读取文件行并将其放入数组?,c,fgetc,C,Fgetc,我想创建一个函数来逐行读取文件。每一行代表一个名字 int readConfig(char ** path, FILES ** files ) { FILE* f; f = fopen("file", "r"); int ch; while ((ch=fgetc(f)) != EOF ) { } return 0; } 如何使用fgetc函数解析文件?以及如何将结果发送到文件[count].name 立刻: char configFile

我想创建一个函数来逐行读取文件。每一行代表一个名字

int readConfig(char ** path, FILES ** files )
{
    FILE* f;
    f = fopen("file", "r");   
    int ch;
    while ((ch=fgetc(f)) != EOF )
    {

    }
return 0;
}
如何使用fgetc函数解析文件?以及如何将结果发送到文件[count].name

立刻:

char configFile [11] = "kernels.cfg";
[11] 太小了。尝试:

char configFile [12] = "kernels.cfg";

此外,字符太小,不适合ch使用:

int ch;

您还可能会发现fgets(一次读取一整行)比fgetc更易于使用。

由于修改字符串文字,您得到的是SIGSEGV,这会导致例如您的SIGSEGV。我不确定文件名和名称变量中应该存储什么。如果通过线路:

strcpy(files[count].filename,'.bin');
您想在filename变量中添加一个“.bin”,那么这种方法是错误的。你应该使用strcat。strcpy将从这个变量的开头写入filename,所以以前保存在那个里的一些字符将被覆盖。strcpy还添加了一个空终止字符,因此如果您想打印它,printf将在该\0字符上停止,并且不再继续。然而,真正的问题是,应该使用malloc为struct中的变量分配一些空间。然后您将能够修改它们

考虑一个简单的例子:

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

struct file {
    char* name;
    char* filename;
};

int main(void)
{
    struct file x;
    x.name = malloc(30);
    x.filename = malloc(40);

    strncpy(x.name, "copied_string", 13);
    printf("%s\n", x.name);

    strcat(x.name, "_suffix"); 
    printf("%s\n", x.name);

    strcpy(x.name, "erased");
    printf("%s\n", x.name);

    free(x.name);
    free(x.filename);
    return 0;
}
这应该能让你更清楚地知道你的车祸是从哪里来的。你也应该考虑使用或。记住释放你所拥有的

编辑:

调用readConfig&path和&files;导致向readConfig传递FILES*[256]类型的指针。考虑更改文件文件〔256〕;到

然后调用函数readConfig&path,files


然后将一种兼容类型的文件传递给readConfig函数

?&files的类型为files**[256]。它与文件**不兼容。您的编译器应该对此发出警告。谢谢。但是strncpy不是必需的,是吗?我使用strcpy将name复制到.name,并将.name复制到.filename。然而,当我试图复制“.bin”时,仍然遇到了错误。啊,这就是问题所在。应该有.bin,而不是单引号。但是我应该如何释放内存,我应该使用freefiles还是创建一个带有循环的函数?我应该释放其元素的所有成员。。。freefiles[count],名称;freefiles[count],文件名;我相信第二个是正确的。真的谢谢你的免费通知!strncpy不是必需的,但它更安全:您应该显式地取消分配已分配的内容。如果struct的成员是用malloc分配的,那么释放struct不会释放属于该成员的内存。即使struct也是用malloc分配的,它也可能只是堆栈上的一个变量。我已经给了您一些提示。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct file {
    char* name;
    char* filename;
};

int main(void)
{
    struct file x;
    x.name = malloc(30);
    x.filename = malloc(40);

    strncpy(x.name, "copied_string", 13);
    printf("%s\n", x.name);

    strcat(x.name, "_suffix"); 
    printf("%s\n", x.name);

    strcpy(x.name, "erased");
    printf("%s\n", x.name);

    free(x.name);
    free(x.filename);
    return 0;
}
copied_string
copied_string_suffix
erased
FILES* files = malloc(sizeof(FILES)*256);