C 程序在应该追加时预置



尝试用 C 编写一个我以前从未使用过的程序,将十六进制转换为二进制字符串并将其写入文件,唯一的问题是当我希望它附加时它会附加到输出文件前面。这发生在 fprintf(( 和 fputs(( 上。

这是附加代码:

while(fgets(line,1024,inputFile)){
  lineLen = strlen(line);
  binary = hexToBin(line, lineLen);
  printf("Binary: %sn", binary);
  // output file does not exist
  FILE *writeFile = fopen(argv[2], "a");
  if (writeFile == NULL) {
    fprintf(stderr, "write file not found: %sn", strerror(errno));
    exit(1);
  }
  printf("appending binary to filen");
  fprintf(writeFile,"%sn",binary);
  printf("appendedn");
}

这是十六进制托宾函数:

char* hexToBin(char hex[], size_t len){
  // convert hexadecimal to binary
  char *binString = (char*)malloc(sizeof(char)*4*len);
  for (int i=0;i<len;i++){
      char *binNum = hexToBinHelp(hex[i]);
      strcat(binString,binNum);
      free(binNum);
  }
  return binString;
}

hexToBinHelp 返回十六进制字符作为其二进制表示形式的字符*(例如 binNum=[0][0][0][0](。它真的很长,所以我宁愿不把它放在这里,但如果它有帮助,可以。

当输入文件为:

000a
a000

输出文件为:

1010000000000000
0000000000001010

谢谢

你的循环每次迭代都会调用 fopen((,并且从不关闭或刷新此文件流。写入是缓冲的,等待缓冲区填充或刷新或关闭文件;因此,下次调用 fopen(( 时,您会得到与第一次相同的指针。

你很幸运,它没有崩溃。:)不要重复调用 fopen((。在循环外调用一次,在内部使用或将指针移过,然后在调用 fclose(( 之外返回。

相关内容

  • 没有找到相关文章

最新更新