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

时间:2015-02-27 03:25:57

标签: c scanf fwrite

我正在尝试使用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

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

我相信这应该摆脱seg错误。

  1. 类型应为char *,而不是unsigned char *
  2. 数组应该有足够的空间来容纳所需的字符和空终止符。
  3. 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>