在C语言中,读取文本文件并将其内容保存到动态字符数组中是一个常见的任务。然而,如果不正确地管理内存,可能会导致“malloc():内存崩溃”这样的错误。以下是解决这个问题的详细步骤和示例代码。
malloc()
函数在运行时分配内存。fopen()
、fread()
、fclose()
等进行文件读写。malloc()
分配的字符指针。以下是一个完整的示例,展示如何安全地读取文本文件并将其内容保存到动态字符数组中:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* read_file(const char* filename) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
perror("Error opening file");
return NULL;
}
// 获取文件大小
fseek(file, 0, SEEK_END);
long file_size = ftell(file);
fseek(file, 0, SEEK_SET);
// 分配内存
char* buffer = (char*)malloc(file_size + 1); // +1 for the null terminator
if (buffer == NULL) {
perror("Error allocating memory");
fclose(file);
return NULL;
}
// 读取文件内容
size_t bytes_read = fread(buffer, 1, file_size, file);
if (bytes_read != file_size) {
perror("Error reading file");
free(buffer);
fclose(file);
return NULL;
}
buffer[file_size] = '\0'; // 添加字符串结束符
fclose(file);
return buffer;
}
int main() {
const char* filename = "example.txt";
char* content = read_file(filename);
if (content != NULL) {
printf("File content:\n%s\n", content);
free(content); // 记得释放内存
}
return 0;
}
malloc()
时分配足够的内存,并在使用前检查指针是否为NULL。perror()
输出错误信息,并进行适当的错误处理。free()
函数释放它。通过上述方法和示例代码,你应该能够安全地读取文本文件并将其内容存储在动态字符数组中,避免常见的内存管理问题。
领取专属 10元无门槛券
手把手带您无忧上云