C程序的预规划的时候应该追加

问题描述 投票:1回答:1

试图用C来写,这是我以前从未使用过,为十六进制转换成二进制为字符串,并将其写入文件的程序,唯一的问题是,它预先考虑到输出文件时,我想它追加。这种情况出现在fprintf中()和fputs()的。

这是追加的代码:

while(fgets(line,1024,inputFile)){
  lineLen = strlen(line);
  binary = hexToBin(line, lineLen);
  printf("Binary: %s\n", binary);

  // output file does not exist
  FILE *writeFile = fopen(argv[2], "a");
  if (writeFile == NULL) {
    fprintf(stderr, "write file not found: %s\n", strerror(errno));
    exit(1);
  }
  printf("appending binary to file\n");
  fprintf(writeFile,"%s\n",binary);
  printf("appended\n");
}

这是hexToBin功能:

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返回十六进制字符作为它的一个char *的二进制表示(binNum = [0] [0] [0],例如[0])。这是很长,所以我宁愿不把它放在这里,但是如果这将有助于。

当输入文件是:

000a
a000

输出文件是:

1010000000000000
0000000000001010

谢谢

c append prepend
1个回答
4
投票

您的循环调用fopen()函数每次迭代,从来没有关闭或刷新该文件流。写操作被缓冲,等待缓冲器填充或冲刷或要关闭的文件;所以下次你打电话时fopen()函数,你会得到相同的指针作为第一次。

你很幸运,它不会崩溃。 :)不要重复调用fopen()函数。一旦把它叫做循环外,内部使用或将指针移到和回外线呼叫FCLOSE()。

© www.soinside.com 2019 - 2024. All rights reserved.