gpt4 book ai didi

c - 将 struct 打印到文件打印 char 数组的所有空元素

转载 作者:行者123 更新时间:2023-11-30 14:38:48 24 4
gpt4 key购买 nike

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

#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

最佳答案

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

您的表达式 exists = 0 始终会导致 exists 的值为 0

将 if 表达式更正为 !exists,这是一个 bool 表达式,用于将 exists 与值零进行比较。

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

这就是你的意思。

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

你编写二进制文件,所以也读取二进制文件。

当所有简单问题都解决后,真正的问题出现了:为追加而打开的文件位于文件末尾。

每次想要从文件中读取 header 或记录时,都使用 fseek 来定位文件指针。

这是我的工作版本:

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

const Header defaultHeader = {-10, 0, "CS3411 TAR"};

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

perror("Couldn't open file");
return EXIT_FAILURE;
}
Header header;

//Check if exists
fseek(fp, 0, SEEK_SET);
int bytesRead = fread(&header, sizeof(Header), 1, fp);
printf("bytesRead: %d\n", bytesRead);
if (bytesRead == 1)
{
printf("Header found!\n");
}
else
{
fseek(fp, 0, SEEK_SET);
//file header DNE
fwrite(&defaultHeader, sizeof(Header), 1, fp);

printf("Header written.\n");
}

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

fclose(fp);

return EXIT_SUCCESS;
}

关于c - 将 struct 打印到文件打印 char 数组的所有空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56411222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com