我正在尝试使用fscanf和fwrite将字符串和整数转换为二进制文件,以将它们写入输出文件。
我的输入文件:
a 100
ab 99
abc 98
abcd 97
abcde 96
每行分隔字符串和int的每个空格都是一个标签。
这是我的main.c文件,其中应该发生魔法(但不是):
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 30
int main(int argc, char * argv[]){
FILE *ifp;
FILE *ofp;
if(argc != 4){
fprintf(stderr, "Usage: flag %s input-file output-file\n", argv[0]); exit(1);
}
if((ifp = fopen(argv[2], "r")) == NULL){ /* error check to make sure the input file is open*/
fprintf(stderr, "Could not open file: %s", argv[2]); exit(1);
}
puts("input file open\n");
if((ofp = fopen(argv[3], "wb")) == NULL){ /* Opens output file to write in binary*/
puts("couldnt open output file\n"); exit(1);
}
puts("output file open\n");
unsigned char tempstr[MAX_LEN];
unsigned int tempint;
while(fscanf(ifp, "%u %u\n",(unsigned int*)&tempstr, &tempint) == 2){
fwrite((const void*)&tempstr, sizeof(tempstr)+1, 1, ofp);
fwrite((const void*)&tempint, sizeof(unsigned int), 1, ofp);
puts("ran loop");
}
fclose(ifp);
return 0;
}
当我运行我的代码时,我的while循环似乎没有运行(即没有输出“run loop”)。不知道从哪里去?
我在命令行的调用如下:
./ a.out main.c t1.txt t1.bin
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
我相信这应该摆脱seg错误。
char *
,而不是unsigned char *
char tempstr[30];
unsigned int tempint;
while (fscanf(ifp, "%s \t %i\n",tempstr, &tempint) == 2 ) {
fwrite((const void*)&tempstr, sizeof(tempstr)+1, 1, ofp);
fwrite((const void*)&tempint, sizeof(unsigned int), 1, ofp);
puts("ran loop");
}
此外,我猜您在执行main.c
等时不需要./a.out ...
。您可以在代码中更改argc != 3
而不是4
。< / p>