c - 有没有办法读取文本文件并将其保存在 C 中的动态字符数组中,之前尝试一下并得到 'malloc(): memory Corruption'

标签 c memory char malloc corruption

我正在编写一个C程序,它应该读取不同大小的文本文件并将其保存到char *sending_data中。之后,它应该将 char *sending_data 的内容复制到 char *data 中,并打印出 *data 的大小。

我已经有了读取文件并将其保存到 char *sending_data 中的代码。如果我尝试将内容复制到另一个 char *,则会收到 malloc():内存损坏错误。

如果我尝试打印 sending_datadata 的大小,则会收到内存访问错误。

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] = '\0';
            }
        }
        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_datadata 中没有嵌入格式说明符,则可以使用 sending_datadata 来解决此问题,但在传入 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); 

关于c - 有没有办法读取文本文件并将其保存在 C 中的动态字符数组中,之前尝试一下并得到 'malloc(): memory Corruption',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560760/

相关文章:

c - 使用 GSL 计算矩阵的克罗内克积的有效方法

c - 访问 View 中的 DataContext 属性

C 中的完整类型到不完整类型 : C11 standard

arrays - 将 uint32 地址转换为 char 数组

c - 当传递给 C 中的函数时丢失 char**array 的内容

c - 如何将 char[] 数组转换为 char*

c - 中断正在等待的 accept(),只是改变一个全局变量值

c++ - 静态方法节省内存? (非托管代码)

c - 读取位置位置 0x1D5C4C2F 访问冲突

c++ - 指向其值的双向链表的析构函数