我想打开文件“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/

10-12 17:52