gpt4 book ai didi

c - 使用文件描述符读取文件时出现 SIGSEGV

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:57 26 4
gpt4 key购买 nike

我正在尝试使用文件描述符读取文件。文件描述符是正确的,所以,文件是正确打开的。程序读到最后一行时报错

这是代码:

void readFile(char* filePath){
int fd,i=0;
char *c= NULL;
int read=1;
fd = open(filePath, O_RDONLY );
char **config;
config=(char**)malloc(4 * sizeof(char*));

if(fd<0){
printf("Error");
} else {
while (read==1){
c=readLine(fd);

if(*c=='\0'){
read=0;
}else{
config[i]=(char*) malloc(sizeof(char));
strcpy(config[i], c);
i++;
}
}
close(fd);
}

}

char *readLine(int fd){
char character;
char *array= malloc(1);
unsigned int siz=1;


while (read(fd, &character, 1) > 0 && character!='\n'){
array=realloc(array, siz + 1);
array[siz - 1]=character;
siz ++;
}
array[siz - 1]='\0';
return array;

最佳答案

该程序有几个缺陷,包括没有释放动态分配的内存(例如 readline 返回的内存)。

但是,阻止程序运行的至少是每个 config[i] 位置的空间不足。您只需为一个字符保留空间 malloc(sizeof(char)),但您必须为随后复制的整个字符串保留空间,加上结尾的 '\0': malloc(strlen(c) + 1)。此外,请考虑使用 strlenstrcpy 等期望字符串包含非二进制数据,并且可能因不同的编码等而失败。

另一种解决方案是将 config[i] 分配给返回的 c 字符串,然后在释放 config 时释放它。您将避免复制字符串。

关于c - 使用文件描述符读取文件时出现 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57044959/

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