我会将带有一个或多个Pascal-Strings的二进制文件转换为.Txt文件。这是正确的方法,但它似乎是一个分段错误。我不明白,问题出在哪里。文件大小为23.
void printFile(char *buffer, char *output_file, int file_size)
{
FILE *out_file = fopen(output_file, "w");
int i = 0;
int j = 1;
int cnt = 0;
int cnt_word = 0;
int block = 4;
while (i < block)
{
cnt = cnt + buffer[i];
i++;
}
while (j <= cnt)
{
while (i < file_size)
{
while (i < (i + block))
{
cnt_word = cnt_word + buffer[i];
i++;
}
while (i < (i + cnt_word))
{
fprintf(out_file, "%c", buffer[i]);
i++;
}
fprintf(out_file, " ");
cnt_word = 0;
j++;
}
}
fclose(out_file);
}
这是其他函数get filesize
:
fseek(in_file, 0, SEEK_END);
file_size = ftell(in_file);
rewind(in_file);
//allocate memory for buffer
buffer = malloc(file_size);
答案 0 :(得分:2)
while (i < (i + block))
这里的块是4,我看不出这种情况怎么会失败
答案 1 :(得分:2)
IIRC pascal字符串存储的长度为第一个字节,它们不存储终止\ 0,因为C字符串是
为了显示字符串,您需要使用十六进制编辑器检查文件中的确切格式。
然而,您可以首先使用calloc将缓冲区设置为\ 0,然后将文本放在那里,以确保缓冲区是\ 0终止的。