我想打开文件“t10k-labels.idx1-ubyte”并打印出来。当我在 read.c 中打印它时它工作正常,但是当我尝试在 main.c 中读取返回的数组时它不起作用(它正确打印前 3 位数字,但之后它只打印 0。
我不知道我做错了什么。
读.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;
}
主文件
#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 将在第一个值为 0 的字节处停止复制。它用于复制空终止字符串,而不是字节数组。 strncpy 用更多的零填充第一个零之后的所有字节,这解释了您所看到的
关于c - 返回一个 C 数组并在 main.c 中读取它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39929808/