【发布时间】:2018-01-22 18:02:38
【问题描述】:
我正在尝试读取一个文件并将该文件拆分为多个缓冲区。 这就是我想出的:
#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
你有什么建议吗?
【问题讨论】:
-
您可能应该坚持使用
char* filepath = PATH,因为使用固定长度的缓冲区,要么浪费大,要么太小并且有问题。 -
声明:
char *buffer[size];将声明一个大小为 2048 的字符指针数组。我认为您真正想要的是一个大小为 2 的 2048 个字符的数组。所以,也许你的声明应该是这样的:char[2][size];
标签: c file sockets buffer fgets