是否可以从文件中获取令牌并使用 C 中的 malloc 创建结构?

Is it possible to take a token from a file and create a struct with it using malloc in C?

我需要同时使用 mallocrealloc,但不知道该怎么做。

假设输入文件如下所示:

a *b c
a
*a b *c

我的结构是这样设置的:

typedef struct Unit {
    bool hasAstericks;
    char letter;
} unit;

typedef struct Line {
    struct unit clause[4]
} line;

是否可以从每个字母创建一个类型为 unit 的结构,将它们添加到结构 Line 中的数组中,基于它们所在的行?我试过使用循环,但无法用它们即时创建结构。

这是我试过的:

int c;
filename = argv[1];
char *filename;
FILE *fp = fopen(filename, "r");  
filename = (char *)malloc(size);

do {
    c = fgetc(fp);
    inputFile = (char *)realloc(inputFile, size + 1);
    inputFile[n] = c;
    n++;
    size++;
} while (c != EOF);

您的 do/while 循环尝试将文件读入 char 数组,您为从文件中读取的每个额外字节重新分配该数组。

然而,您应该在将字节存储到数组中之前测试文件结束

完成后最好在数组末尾设置一个空终止符,这样数组应该有 size + 1 个字节。

这里修改代码并封装在函数中读取文件:

char *read_file(const char *filename) {
    FILE *fp = fopen(filename, "r");  
    if (fp == NULL)
        return NULL;
    size_t size = 0;
    char *p = malloc(size + 1);
    if (p != NULL) {
        int c;
        while ((c = getc(fp)) != EOF) {   
            char *newp = realloc(p, size + 2);
            if (newp == NULL) {
                free(p);
                p = NULL;
                break;
            }
            p = newp;
            p[size] = c;
            size++;
        }
        if (p) {
            p[size] = '[=10=]';  set a null terminator: make p a C string.
        }
    }
    fclose(fp);
    return p;
}