从输入文件转换字符串和整数并打印到输出文件
Converting strings and ints from input file and printing to output file
我正在尝试使用 fscanf 和 fwrite 将字符串和整数转换为二进制,以将它们写入输出文件。
我的输入文件:
a 100
ab 99
abc 98
abcd 97
abcde 96
每个 space 分隔每行上的字符串和 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 循环似乎不是 运行ning(ie.the "ran loop" 没有被输出)。不确定从这里去哪里?
另外我在命令行的调用如下:
./a.out main.c t1.txt t1.bin
如有任何帮助,我们将不胜感激!谢谢!
我相信这应该可以消除段错误。
- 类型应该是
char *
而不是unsigned char *
- 数组应该有足够的 space 来容纳所需的字符和空终止符。
.
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");
}
此外,我猜你在执行 ./a.out ...
等时不需要 main.c
。你可以在代码中更改检查 argc != 3
而不是 4
。
我正在尝试使用 fscanf 和 fwrite 将字符串和整数转换为二进制,以将它们写入输出文件。
我的输入文件:
a 100
ab 99
abc 98
abcd 97
abcde 96
每个 space 分隔每行上的字符串和 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 循环似乎不是 运行ning(ie.the "ran loop" 没有被输出)。不确定从这里去哪里?
另外我在命令行的调用如下:
./a.out main.c t1.txt t1.bin
如有任何帮助,我们将不胜感激!谢谢!
我相信这应该可以消除段错误。
- 类型应该是
char *
而不是unsigned char *
- 数组应该有足够的 space 来容纳所需的字符和空终止符。
.
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");
}
此外,我猜你在执行 ./a.out ...
等时不需要 main.c
。你可以在代码中更改检查 argc != 3
而不是 4
。