我必须打开/读取一个为ascii art文件(图像)的文件,要求我将图像的宽度和高度返回到主例程,然后要求我通过指针将图片数据传递回去。这是我必须使用的函数原型:
unsigned char *foo(char *filename, int *width, int *height)
在foo内部,我必须使用char的动态数组来存储tha图像数据。我需要使用fread()来读取该数据。我还必须在每行末尾说明回车。
打开并读取数据后,将其传递回主例程。然后,主例程必须创建一个动态2D数组来存储图像,将1D数组复制到2D数组中,然后在屏幕上显示图像。
图像文件名:data.txt
我的代码:
#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
,但您正在为其分配一个指向未签名char的指针。这是不正确的:art
应该用星号声明。
您还要%c
在传递数组时打印单个字符art
。这不会打印出任何令人感兴趣的内容。如果要打印第一个字符,请打印art[0]
。如果要打印整个图片,请制作一对嵌套循环,在width
和上进行迭代height
,打印每个字符,并'\n'
在每行之后打印。
以下是一些其他注意事项:
fread
,因为它会将\n
s引入数据中。相反,您应该逐行读取文件。fscanf(inFile, "%d %d", width, height);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句