c - fread() 不添加空终止符 [C],无法添加 1,因为我有一个指向指针的指针

标签 c pointers structure string-formatting null-terminated

第 37 行,我正在尝试打印缓冲区指针中的数据。但我有一个指向指针(char* buffer)的指针(gdhFileProp->buffer)。由于我使用的是 fread(),因此在读取文件内容时不会添加\0。由于它是指向指针的指针,因此我无法添加\0。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


// Struct to hold the properties of our file
typedef struct {

    int size;
    char* name;
    char* buffer;

} FILEPROP;

FILEPROP* gdhFileProp;

// Function to parse file
int parseFile(char name[]){

    // set name
    gdhFileProp = malloc(sizeof(FILEPROP));
    gdhFileProp->name = name;

    // load file
    FILE* gdhFilePointer;
    gdhFilePointer = fopen("test.txt", "rb+");

    // get file size
    fseek(gdhFilePointer, 0, SEEK_END);
    gdhFileProp->size = ftell(gdhFilePointer);

    //get data and put it into the buffer
    fseek(gdhFilePointer, 0, SEEK_SET);
    fread(&gdhFileProp->buffer, 1, gdhFileProp->size, gdhFilePointer);
    //Print data
    printf("File properties:\nSize: %d bytes\nName: %s \nData: %s\n", gdhFileProp->size, gdhFileProp->name, &gdhFileProp->buffer);

    return 1;
}

int main()
{
    char name[] = "test.txt";
    parseFile(name);
    return 0;
}

最佳答案

您有未定义的行为:您根本不为缓冲区分配空间。您应该这样做,然后您可以根据需要添加空终止符。或者尝试简单地使用fwrite(buffer, 1, size_read, stdout);

关于c - fread() 不添加空终止符 [C],无法添加 1,因为我有一个指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26417900/

相关文章:

c - 我怎样才能获得选定的文本

检查字符串是否包含换行符

c++ - 指向模板类成员函数的函数指针? (C++)

c++ - 聚合结构构造函数

c++ - C++ 中 sizeof(struct) 的奇怪输出

c - 从c中的文本文件读取 float 时出现错误值

c - 声明在 c 中错误终止

c++ - 删除 union 中的指针

c - C中的指针传递

c - 如何初始化结构数组?