从输入文件转换字符串和整数并打印到输出文件

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

如有任何帮助,我们将不胜感激!谢谢!

我相信这应该可以消除段错误。

  1. 类型应该是char *而不是unsigned char *
  2. 数组应该有足够的 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