将结构打印到文件中,打印出char数组的所有空元素

时间:2019-06-01 23:47:36

标签: c

我正在尝试创建一个程序来创建文本文件,将未知数量的结构和其他文件内容写入一个主文件。当我将结构写入文本文件时,它会写入字符数组的所有空元素,因此我想避免这种情况。关于如何防止编写这些元素的任何想法吗?我是该程序的开始部分,正在构建它。

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
struct hdr
{
  int file_size;
  char deleted[1];
  char file_name[256];
};

int main()
{

  //Open the main file, check if the main header exists
  FILE *fp;
  int exists = 0;
  fp = fopen("CS3411TAR.txt","a+b");

  //Check if exists
  char* buf[100];
  while(fscanf(fp," %*s %*s %s ",buf) >0){
    exists = 1;
  }



  if(exists == 0){
    //file header DNE
    struct  hdr create = {atoi("-10"),"0","CS3411 TAR"};
    fwrite( &create, sizeof(struct hdr),1,fp);

  }
  //To-Do  open file arguments names create headers and write

  fclose(fp);



  return 0;
}


这是文件输出,由于它仅连续200多次奇数次,因此一些元素已被删除

öÿÿÿ0CS3411 TAR^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

我希望输出

-10
0
CS3411 TAR

1 个答案:

答案 0 :(得分:0)

请记住,if子句需要一个表达式来求值。

您的表达式exists = 0始终得到exists的值,即0

将if表达式更正为!exists,这是一个布尔表达式,可以将exists与值零进行比较。

如果exists的值不等于0,则写入文件,否则跳过write语句。

这就是你的意思。

添加fread而不是fscanf语句来检查标头是否存在于刚打开的文件中。

您编写二进制文件,因此也读取二进制文件。