我正在尝试读取一个文件并将该文件拆分为多个缓冲区。 这就是我想到的:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define PKT_SIZE 2048;
#define PATH "directory of some kind"
int main() {
char filepath[200] = PATH;
FILE *packet;
int size = PKT_SIZE;
char *buffer[size];
int i=0;
//OPEN FILE
if((packet = fopen(filepath, "r")) == NULL){ //I'm trying with a txt file, then i'll change it to 'rb'
printf("Error Opening File\n");
return -1;
}
//READ FILE
while(*fgets((char *) *buffer[i], (int) strlen(buffer[i]), packet) != NULL) { //read the file and cycling insert the fgets into the buffer i
printf("Create %d buffer\n", i);
i++;
}
fclose(packet);
return 0;
}
现在,当我运行这个程序时,我收到一个 SIGSEGV 错误,我设法理解这个错误是肯定的:
*fgets((char *) *buffer[i], (int) strlen(buffer[i]), packet) != NULL
你有什么建议吗?
最佳答案
*fgets((char *) *buffer[i], (int) strlen(buffer[i]), packet)
这一行有几个问题。
buffer[i]
只是一个未初始化的指针,指向任何地方。*buffer[i]
的类型为char
,您需要传递char*
。strlen
未返回缓冲区的大小。这是未定义的行为,因为您通过未初始化的指针值调用了它。- 当
fgets
返回NULL
时,取消对fgets
返回的任何内容也是不好的。它会调用未定义的行为。
对此有很多解决方案,从动态内存分配到使用
字符缓冲区[大小][MAXSIZE];
。如果您这样做,您可以通过以下方式获取输入:
#define MAXSIZE 100
...
char buffer[size][MAXSIZE];
while(fgets(buffer[i], sizeof(buffer[i]), packet)!=NULL){...
关于c - 我需要将一个文件(现在是文本文件)拆分为多个缓冲区 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48387653/