如何读取C 中的raw文件
how to reading .raw file in c++
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()
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++窗口中的 RAW 套接字
- 如何读取C 中的raw文件