我正在尝试将一组行从文件读取到数组。我这样做是为了学习 malloc 和 realloc。
#define MAX_LINE 301
char** read_file_lines(char* filename) {
char** ptr = NULL;
int max = 5;
int i = 0;
FILE *fp = fopen(filename, "r");
if(fp != NULL) {
char line[MAX_LINE];
while(fgets(line, MAX_LINE, fp) != NULL) {
/* allocate some extra memory for some more lines */
if(i == max) {
int new_max = max * 2;
int nr_bytes = new_max * sizeof(char) * MAX_LINE;
char **ptr2 = realloc(ptr, nr_bytes);
if(ptr2 != NULL) {
ptr = ptr2;
ptr2 = NULL;
max = new_max;
}
}
// ptr[i] = line;
// strcpy(ptr[i], line);
memcpy(ptr[i], line, strlen(line));
i++;
}
fclose(fp);
}
else {
printf("Error opening file %s\n", filename);
}
return ptr;
}
代码编译。但是,当它执行时,会发生错误(程序崩溃)。
我做了一些调试,并确定问题出在memcpy ()
指令中。我以前尝试过 using strcpy
,这也给出了类似的问题。
我去查看了memcpy()的protocol,如下:
void * memcpy ( void * destination, const void * source, size_t num );
现在, if ptr
is char**
, 不ptr[i]
等于 a char*
?
感谢您的意见。