gpt4 book ai didi

指向数组中的文件时 fread 中的 Coredump

转载 作者:行者123 更新时间:2023-12-04 05:24:32 27 4
gpt4 key购买 nike

最近开始使用指针并创建了一个小脚本,应该将一些文本文件拼接在一起。

但是,当我尝试调用 fputs 时,出现核心转储/段错误。我怀疑这是因为文件指针的保存方式。我发现这些文件将它保存在一个数组中,并稍后尝试检索它。

FILE 指针保存在一个结构中。有人会立即发现我的错吗?我将不胜感激!

结构:

typedef struct{
int listSize;
int listCapacity;
FILE *fileStream;
}FileList;

创建结构
FileList fileList;
fileList.listSize=0;
fileList.listCapacity=1;
fileList.fileStream=calloc(fileList.listCapacity,sizeof(FILE));

然后我通过调用将结构添加到数组中
void addFile(FileList* list, FILE* file)
{
list->fileStream[list->listSize]=*file;
}

但是当我打电话
char* buffer[10];
size_t result=0;

result = fread(buffer,1,10,&fileList.fileStream[ii+currentGroupOffset]);
fputs(*buffer,outPutFile);

它崩溃了,我试图观察值 ii+currentGroupOffset 以确保它不会超出数组边界

任何帮助都appriciated! :)

最佳答案

您不能在 FILE 周围分配和复制自己构建结构 - 它是一种不透明的数据类型。所以,而不是创建一个数组 FILE结构,创建一个数组 FILE *指针:

typedef struct {
int listSize;
int listCapacity;
FILE **fileStream;
} FileList;

FileList fileList;

fileList.listSize = 0;
fileList.listCapacity = 1;
fileList.fileStream = calloc(fileList.listCapacity, sizeof fileList.fileStream[0]);

然后添加一个 FILE *通过复制指针值指向数组的指针:
void addFile(FileList *list, FILE *file)
{
list->fileStream[list->listSize] = file;
}

并像这样使用它:
char buffer[10];
size_t result = 0;

result = fread(buffer, 1, 10, fileList.fileStream[ii+currentGroupOffset]);
fwrite(buffer, 1, result, outPutFile);

关于指向数组中的文件时 fread 中的 Coredump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353672/

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