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



我需要同时使用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数组中,并为从文件读取的每个额外字节重新分配该数组。

然而,在将字节存储到数组中之前,您应该测试文件的末尾。

此外,完成后最好在数组末尾设置一个null终止符,这样数组应该有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] = '';  set a null terminator: make p a C string.
}
}
fclose(fp);
return p;
}

相关内容

  • 没有找到相关文章

最新更新