2016-10-08 5 views
3

ファイル "t10k-labels.idx1-ubyte"を開き、それを印刷したいと思います。私はそれを正常に動作しますが、私はmain.cで返された配列を読み込もうとすると、最初の3桁を正しく出力しますが、それ以降は0しか出力しません。 私が間違ってやってアイデア。C配列を返してmain.cで読み込みます

read.c

#include <stdio.h> 
#define LABELSIZE 4542 
#define OFFSET 8 

char * test_labels() { 
    FILE *file; 
    file = fopen("t10k-labels.idx1-ubyte", "rb"); 
    static char buffer[LABELSIZE-OFFSET]; 

    fseek(file, 8L, SEEK_SET); 
    fread(buffer, 1, LABELSIZE-OFFSET, file); 

    /* int i; */ 
    /* for(i=0; i<=LABELSIZE-OFFSET; i++) { */ 
    /* printf("%d ", buffer[i]); */ 
    /* } */ 

    fclose(file); 
    return buffer; 
} 

main.cの

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

#define LABELSIZE 4542 

main() { 
    // char buffer[LABELSIZE-8]; 
    char* buffer = malloc(LABELSIZE-8); 
    strncpy(buffer, test_labels(), LABELSIZE-8); 

    int i; 
    for(i=0; i<LABELSIZE-8; i++) { 
    printf("%d", buffer[i]); 
    } 
} 
+1

memcpyではなくstrncpyを試してみてください。 strncpyはゼロの値を持つ最初のバイトで停止します。これは、バイトの配列ではなく、終了文字列をコピーするためのものです。 strncpyは、最初のゼロの後ろのすべてのバイトを0でさらに埋めます。これは、あなたが見ているものを説明します。 –

+0

@SectoKia:これはコメントではなく答えになる可能性があります。 – hugomg

答えて

3

トライmemcpyのではなく、strncpyを。strncpyを、値を持つ最初のバイトでコピーを停止します0の文字列です。バイト配列ではなくヌル終了文字列をコピーします。strncpyはすべてのバイトを埋めます。あなたが見ていることを説明している0をゼロにして最初のゼロの後に。

関連する問題