我正在尝试创建一个程序来创建文本文件,将未知数量的结构和其他文件内容写入一个主文件。当我将结构写入文本文件时,它会写入字符数组的所有空元素,因此我想避免这种情况。关于如何防止编写这些元素的任何想法吗?我是该程序的开始部分,正在构建它。
#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
答案 0 :(得分:0)
请记住,if
子句需要一个表达式来求值。
您的表达式exists = 0
始终得到exists
的值,即0
。
将if表达式更正为!exists
,这是一个布尔表达式,可以将exists
与值零进行比较。
如果exists
的值不等于0
,则写入文件,否则跳过write语句。
这就是你的意思。
添加fread
而不是fscanf
语句来检查标头是否存在于刚打开的文件中。
您编写二进制文件,因此也读取二进制文件。