如何读取C 中的raw文件

how to reading .raw file in c++

本文关键字:中的 raw 文件 读取 何读取      更新时间:2023-10-16
    void solution3(){
        char str[100];
        int height, width;
        printf("가로와 세로 길이를 입력 : ");
        scanf("%d %d", &width, &height);
        FILE* fp = fopen("lena_256x256.raw", "rb");
        //2dynimic
        unsigned char **p = new unsigned char*[height];
        for(int i = 0; i < height; i++) *(p + i) = new unsigned char[width];
        for(int i = 0; i < height; i++){
            for(int j = 0; j < width; j++)
                fread((void*)p[i][j], sizeof(unsigned char), height * width, fp);
        }
        //print
        for(int i = 0; i < height; i++){
            for(int j = 0; j < width; j++)
                printf("%4d ", p[i][j]);
        }
        //del dynimic
        for(int i = 0; i < height; i ++) delete[] p[i];
        delete[] p;
        fclose(fp);
    }
void main(){
 solution3();
}

错误消息是"字符串!= null"为什么不能读取.raw文件?我尝试p[i][j]修复(void*)p[i][j]。但不能。

我想阅读.raw和打印有关.raw Light的信息

代码在此处具有未定义的行为:

    unsigned char **p = new unsigned char*[height];
    ....
            fread((void*)p[i][j], sizeof(unsigned char), height * width, fp);

p是指向char指针的指针。这意味着p[i][j]是CHAR,代码将其投入到(void*)。这是fread试图写入的无效地址。

您可能想要:

    for(int i = 0; i < height; i++){
        if (fread((void*)p[i], 1, width, fp) != width)
        {
           manage the error condition
        }
    }
除此之外,不建议直接与New/Delete合作,在这种情况下,STD :: vector将更加安全。另外,void main()是错误的,应该是int main()