gpt4 book ai didi

c - 将二进制文件读入同一个后Unsigned Char为(null)

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:56 25 4
gpt4 key购买 nike

我必须打开/读取一个 ascii 艺术文件(图片)并要求我将图片的宽高返回给主程序,然后要求我通过指针将图片数据传回。这是我必须使用的函数原型(prototype):

unsigned char *foo(char *filename, int *width, int *height)

在 foo 内部,我必须使用一个动态的字符数组存储tha图像数据。我需要使用 fread() 来阅读那个数据。我还必须考虑每行末尾的回车。

打开并读取数据后,将其传回主例程。然后主例程必须创建一个动态二维数组来存储图像,复制一维数组放入二维数组中,并将图像显示在屏幕上。

图片文件名:data.txt Image File Contents

我的代码:

#include <stdio.h>
#include <stdlib.h>

void readDimension(FILE *inFile, int *width, int *height)
{
int i;
for (i = 0; i < 2; i++)
{
if (i == 0)
{
fscanf(inFile, "%d", width);
}
if (i == 1)
{
fscanf(inFile, "%d", height);
}
}
}

unsigned char *foo(char *filename, int *width, int *height)
{
FILE *inFile = fopen(filename, "rb");

readDimension(inFile, width, height);

unsigned char *ret = malloc(*width * *height);

fread(ret, 1, *width * *height, inFile);

fclose(inFile);

return ret;
}

int main(int argc, char** argv)
{
FILE *inFile;
int width, height;
unsigned char art;



if (argc == 1)
{
printf("Please specify a file name.\n");
}
else if (argc == 2)
{
inFile = fopen(argv[1], "rb");
if (inFile != NULL)
{
fclose(inFile);

art = foo(argv[1], &width, &height);
int n = sizeof(art);
printf("Data in Array: \\%c \n", art);
printf("Size of Array: %d \n", n);
}
else
{
printf("Error: File Not Found %s", argv[1]);
}
}

printf("Width: %d\n", width); // Testing
printf("Height: %d\n", height); // Testing
}

最佳答案

问题是您正在尝试获取 art 的大小,这是一个指针。它有固定的尺寸。大小应计算为 width*height:

printf("Size of Array: %d x %d (%d)\n", width, height, width*height);

您将 art 声明为 unsigned char,但您正在为其分配一个指向 unsigned char 的指针。这是不正确的:art 应该用星号声明。

您还在传递数组 art 时打印单个字符 %c。这不会打印任何感兴趣的内容。如果你想打印第一个字符,打印art[0]。如果你想打印整张图片,做一对嵌套循环遍历 widthheight,打印每个字符,然后打印 '\n' 每行之后。

这里有一些额外的注意事项:

  • 您不应该使用fread 一次读取整个文件,因为它会在数据中引入\n。相反,您应该逐行阅读文件。
  • 您可以在读取数据的同一个函数中读取宽度和高度
  • 您不需要循环来读取两个整数。您可以在一行中完成,如下所示:fscanf(inFile, "%d %d", width, height);

关于c - 将二进制文件读入同一个后Unsigned Char为(null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30656479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com