2014-10-17 1 views
-1

라인 37, 버퍼 포인터의 데이터를 인쇄하려고합니다. 하지만 포인터 (char * 버퍼) 포인터 (gdhFileProp-> 버퍼) 있습니다. fread()를 사용하고 있기 때문에 파일 내용을 읽을 때 \ 0을 추가하지 않습니다. 포인터이기 때문에 \ 0을 더할 수 없습니다.fread()는 널 종결 자 [C]를 추가하지 않습니다. 포인터에 포인터가 있기 때문에 하나를 추가 할 수 없습니다.

#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; 
} 

답변

1

정의되지 않은 동작이 있습니다. 즉, buffer의 공간을 할당하지 마십시오. 원하는 경우 널 종료자를 추가 할 수 있습니다. 또는 fwrite(buffer, 1, size_read, stdout);을 사용해보세요.

+0

저는 malloc() 함수를 꺼내서 "->"를 "."로 대체했습니다. 이제 작동합니다. 감사. –

+0

그래서 여전히'malloc()'을 호출하지 않고 그 결과를'buffer'에 할당합니까? 그게 사실이라면 당신의 프로그램은 여전히 ​​망가져 있습니다. –

+0

char *에 메모리를 할당했습니다. 그게 전부 야. –

관련 문제