有没有办法读取文本文件并将其保存在 C 中的动态字符数组中,请先尝试并获得 'malloc(): memory Corruption'
Is there a way to read a text file and save it in a dynamical char array in C, try it befor and get 'malloc(): memory Corruption'
我正在编写一个 C 程序,它应该读取不同大小的文本文件并将其保存到 char *sending_data
。之后它应该将 char *sending_data
的内容复制到 char *data
并打印 *data
.
的大小
我已经有了读取文件并将其保存到 char *sending_data
的代码。如果我尝试将内容复制到另一个 char *
,我会得到 malloc(): memory corruption error.
如果我尝试打印 sending_data
或 data
的大小,我会得到 Memory access error.
char * readFile(char *path) {
FILE *fp;
char *data = NULL;
if ((fp = fopen(path, "rb")) == NULL) {
printf("Fehler!! / Datei konnte nicht gelesen werrden \n\n");
return data;
} else if (fseek(fp, 0, SEEK_END) != 0) {
fclose(fp);
} else {
long size = ftell(fp);
if (size > 0 && (data = (char *) malloc(size + 1)) != NULL) {
fseek(fp, 0, SEEK_SET);
if (fread(data, 1, size, fp) != (size_t) size) {
free(data);
data = NULL;
} else {
data[size] = '[=11=]';
}
}
fclose(fp);
}
return data;
}
int main(int argc, char *argv[]) {
/*uint8_t */unsigned char *data;
int USER_SIZE = 8; // you can also use a macro
unsigned char *data;
char *sending_data;
sending_data =(char*)malloc ( USER_SIZE* sizeof (char));
sending_data =readFile("../PayloadFiles/ToDo.txt");
printf(sending_data);
printf(strlen(sending_data));
data = (char*)malloc( USER_SIZE * sizeof(char));
if(data)
strcpy((char*)data, sending_data);
printf(data_size);
printf(data);
}
我期望的是文件的内容和大小,实际上是另一个文件中复制的内容char *
您没有正确使用 printf
。
printf(sending_data);
printf(strlen(sending_data));
...
printf(data_size);
printf(data);
printf
的第一个参数是格式字符串,其中包含文本以及说明如何打印附加参数的格式说明符。如果没有嵌入格式说明符,您可以使用 sending_data
和 data
来解决这个问题,但是在传入 strlen(sending_data)
和 data_size
时类型不匹配。这会调用 undefined behavior,在本例中会导致崩溃。
使用格式字符串来指示如何打印参数:
char *sending_data;
// no need to malloc since you already did that in readFile
sending_data =readFile("../PayloadFiles/ToDo.txt");
printf("%s\n", sending_data);
printf("%zu\n", strlen(sending_data));
int data_size = strlen(sending_data));
data = malloc( data_size + 1);
if(data)
strcpy((char*)data, sending_data);
printf("%d\n", data_size);
printf("%s\n", data);
您应该在 data
变量中分配足够的 space。
data = (char*)malloc(strlen(sending_data)+1);
在调用 readFile
.
后检查 sending_data
是否不为空也是一个好主意
在调用 readFile
之前,您应该在主函数中删除对 sending_data = (char*)malloc(USER...)
的调用,因为这会导致内存泄漏(您在 readFile
内分配内存并覆盖 sending_data
及其结果值)。
此外,如果是 main 函数,最好在末尾调用 free
分配内存(因为这是释放您分配的内存的好习惯)
我正在编写一个 C 程序,它应该读取不同大小的文本文件并将其保存到 char *sending_data
。之后它应该将 char *sending_data
的内容复制到 char *data
并打印 *data
.
我已经有了读取文件并将其保存到 char *sending_data
的代码。如果我尝试将内容复制到另一个 char *
,我会得到 malloc(): memory corruption error.
如果我尝试打印 sending_data
或 data
的大小,我会得到 Memory access error.
char * readFile(char *path) {
FILE *fp;
char *data = NULL;
if ((fp = fopen(path, "rb")) == NULL) {
printf("Fehler!! / Datei konnte nicht gelesen werrden \n\n");
return data;
} else if (fseek(fp, 0, SEEK_END) != 0) {
fclose(fp);
} else {
long size = ftell(fp);
if (size > 0 && (data = (char *) malloc(size + 1)) != NULL) {
fseek(fp, 0, SEEK_SET);
if (fread(data, 1, size, fp) != (size_t) size) {
free(data);
data = NULL;
} else {
data[size] = '[=11=]';
}
}
fclose(fp);
}
return data;
}
int main(int argc, char *argv[]) {
/*uint8_t */unsigned char *data;
int USER_SIZE = 8; // you can also use a macro
unsigned char *data;
char *sending_data;
sending_data =(char*)malloc ( USER_SIZE* sizeof (char));
sending_data =readFile("../PayloadFiles/ToDo.txt");
printf(sending_data);
printf(strlen(sending_data));
data = (char*)malloc( USER_SIZE * sizeof(char));
if(data)
strcpy((char*)data, sending_data);
printf(data_size);
printf(data);
}
我期望的是文件的内容和大小,实际上是另一个文件中复制的内容char *
您没有正确使用 printf
。
printf(sending_data);
printf(strlen(sending_data));
...
printf(data_size);
printf(data);
printf
的第一个参数是格式字符串,其中包含文本以及说明如何打印附加参数的格式说明符。如果没有嵌入格式说明符,您可以使用 sending_data
和 data
来解决这个问题,但是在传入 strlen(sending_data)
和 data_size
时类型不匹配。这会调用 undefined behavior,在本例中会导致崩溃。
使用格式字符串来指示如何打印参数:
char *sending_data;
// no need to malloc since you already did that in readFile
sending_data =readFile("../PayloadFiles/ToDo.txt");
printf("%s\n", sending_data);
printf("%zu\n", strlen(sending_data));
int data_size = strlen(sending_data));
data = malloc( data_size + 1);
if(data)
strcpy((char*)data, sending_data);
printf("%d\n", data_size);
printf("%s\n", data);
您应该在 data
变量中分配足够的 space。
data = (char*)malloc(strlen(sending_data)+1);
在调用 readFile
.
sending_data
是否不为空也是一个好主意
在调用 readFile
之前,您应该在主函数中删除对 sending_data = (char*)malloc(USER...)
的调用,因为这会导致内存泄漏(您在 readFile
内分配内存并覆盖 sending_data
及其结果值)。
此外,如果是 main 函数,最好在末尾调用 free
分配内存(因为这是释放您分配的内存的好习惯)