将二进制文件读入相同的文件后,Unsigned Char为(空)

用户名

我必须打开/读取一个为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
}
谢尔盖·卡里尼琴科(Sergey Kalinichenko)

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

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

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

您还要%c在传递数组时打印单个字符art这不会打印出任何令人感兴趣的内容。如果要打印第一个字符,请打印art[0]如果要打印整个图片,请制作一对嵌套循环,在width上进行迭代height,打印每个字符,并'\n'在每行之后打印

以下是一些其他注意事项:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将二进制文件读取为“ unsigned char”矢量时的模板参数是什么

在C ++中将二进制文件读入char数组

将动态加载的二进制文件静态链接为二进制文件

将二进制文件读入std :: vector <uint16_t>而不是std :: vector <char>

将 char 宏写入二进制文件

从二进制文件读入char *缓冲区时访问violaton

安装后是否可以使setuptool将二进制文件设置为可执行文件

将文件夹添加到GitHub将显示为二进制文件

将二进制文件读取到vector <char>中,读取的内容少于完整文件

读取文件为二进制/十六进制

使用MarkLogic REST API将文本文件加载为二进制文件

Github Windows客户端将cpp文件检测为二进制文件

如果未选择文件,如何将二进制文件设置为null

Python认为以二进制读取方式打开文件时文件为空

Python 3.6:读取非空二进制文件被 Python 解释为空

在C中将二进制文件转换为char

如何将二进制文件输出打印为Base 2(以位为单位)?

在C ++中从二进制文件读取时将char *转换为double?

为多个平台构建linux二进制文件

为Github构建Golang发布二进制文件

为systemd二进制文件提供参数

检查文件是否为二进制

使用参数为二进制文件运行ldd

hexdump并将二进制文件读取为文本

SQL插入二进制文件设置为30

如何将节点缓冲区打印为二进制文件?

将 NumPy 脚本部署为一个小的二进制文件,如何?

是否有方便的方法将文件分类为“二进制”或“文本”?

如何将PyStan对象存储为二进制文件?