麻烦大家帮看一下c,这段代码的目的是读取bin文件里的十六进制数并存到数组里,读取前1,105,920个数都正常,但是在这之后就全都输出CC了,想请问一下这是为啥,是不是数据溢出了,该怎么改呢
#pragma warning(disable:4996);
#include
#define SIZE 608
int main(void)
{
//一、读取数据
FILE* fp;
fp = fopen("C:\\Users\\LEGION\\Desktop\\test.bin", "r");//以只读形式打开D盘的test.bin文件,文件地址储存在指针fp中
if (fp == NULL)
{
printf("failed.\n");
return 1;
}
unsigned char image[3][SIZE][SIZE];//unsigned char型占一个字节
fread(image, 1, SIZE * SIZE * 3, fp);//第一维是列数,第二维是行数
////将fp指针指向的文件写入image数组中,文件中元素的个数为SIZE*SIZE*3,每个元素占1个字节
fclose(fp);
printf("%X\n", image[2][602][575]);
return 1;
}
这是因为你定义的数组的原因,不要用数组!
用malloc根据需要申请一段内存空间,再把数组读到这段内存空间中!
题目:给一个不多于5位的正整数,要求:求出他是几位数分别输出每一位数字,按逆序输出各位数字,例如原数为321,应输出123
思路:构造循环,将输入的数字进行取余,并且依次输出余数,再对其进行除数操作,得到的商再进行取余输出操作。
例如321对10取余为1,输出1.
321除10商32 32对10取余为2 输出2
32除10商3 3对10取余为3 输出3
结果123
代码示例:
int main()
{
int num;
int temp = 0;
printf("请输入数字:");
scanf("%d", &num);
while (num >= 100000)
{
printf("输入有误,请重新输入:");
scanf("%d", &num);
}
if (num > 0 && num < 10)
{
printf("他是一位数:\n");
printf("%d\n", num);
printf("逆序输出:");
}
else if (num > 9 && num < 100)
{
printf("他是两位数:\n");
printf("%d\n", num);
printf("逆序输出:");
}
else if (num > 99 && num < 1000)
{
printf("他是三位数:\n");
printf("%d\n", num);
printf("逆序输出:");
}
else if (num > 999 && num < 10000)
{
printf("他是四位数:\n");
printf("%d\n", num);
printf("逆序输出:");
}
else if (num > 9999 && num < 100000)
{
printf("他是五位数:\n");
printf("%d\n", num);
printf("逆序输出:");
}
while(num > 0 && num < 100000)
{
temp = num % 10;
printf("%d", temp);
num = num / 10;
}
return 0;
}
程序运行:
如果有帮忙点个赞再走!
越努力,越幸运,加油!
如果会了上述方法,针对任意数可转入我的这篇博客
C语言:给一个正数,求出他是几位数,分别输出每一位数字,按逆序输出各位数字,例如原数为321,应输出123_oorik的博客