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]);
}
}
memcpyではなくstrncpyを試してみてください。 strncpyはゼロの値を持つ最初のバイトで停止します。これは、バイトの配列ではなく、終了文字列をコピーするためのものです。 strncpyは、最初のゼロの後ろのすべてのバイトを0でさらに埋めます。これは、あなたが見ているものを説明します。 –
@SectoKia:これはコメントではなく答えになる可能性があります。 – hugomg