C语言中struct指针的问题
本帖最后由 一点都不鱼的鱼 于 2019-9-27 14:20 编辑小弟遇到了这样一个问题:在程序里先定义了一个结构体 A a,又定义了一个结构体指针 A *pa = &a。然后在后面的1~2个函数中传入指针,函数正常执行到此为止一切正常。函数执行完之后,用scanf接收了一个与结构体无关的变量,这时候发现结构体的指针的值发生了改变。 请问各位大佬,为什么会出现这种情况?不胜感激~ 本帖最后由 yuweb 于 2019-9-27 15:39 编辑
你的uint8_t是不是unsigned char的别名
uint16_t %hu
uint32_t %u
uint64_t %llu
uint8_t%c 可能函数里修改了指针,能否贴上来代码看看。 本帖最后由 一点都不鱼的鱼 于 2019-9-27 14:39 编辑
部分代码附上,执行完函数之后指针没有改变。不知道是否和我scanf接收时,用的%u有关,对这个不太了解{:10_266:} 。
uint8_t quadrant;
char input= {'\0'};
uint8_t bmp1_data;
uint32_t startX,startY;
Bmp_Instance bmp1,*bmp1_ptr;
bmp1_ptr = &bmp1;
bmp1_ptr->bdata = bmp1_data;
while(1)
{
do{
printf("请输入要读入的BMP24位文件路径和文件名:\n");
scanf("%s",&input);
}while(BmpInfoGetter(input,bmp1_ptr)==FAILED);
//BmpInfoPrint(bmp1_ptr);
printf("请输入需要生成代码硬件设备的象限(1,3):\n");//执行到此处时,bmp1_ptr指针值还是正常的。
scanf("%u",&quadrant);//scanf接收数据后,这里指针的值就发生了改变。
printf("请输入需要生成代码初始X坐标(值最小的x坐标):\n");
scanf("%u",&startX);
printf("请输入需要生成代码初始Y坐标(值最小的y坐标):\n");
scanf("%u",&startY);
printf("正在生成中...............\n"); 本帖最后由 superbe 于 2019-9-27 16:19 编辑
试下scanf("%c",&quadrant);执行后指针正常吗,quadrant -= 48;
或者不输入,直接给quadrant赋个值测试一下,quadrant=1; yuweb 发表于 2019-9-27 15:37
你的uint8_t是不是unsigned char的别名
uint16_t %hu
对,谢谢。这个很有用,uint8_t能直接用scanf接收数字吗? 一点都不鱼的鱼 发表于 2019-9-27 15:45
对,谢谢。这个很有用,uint8_t能直接用scanf接收数字吗?
理论上是可以的,会根据ASCII码转换,比如输入65,然后用%c输出时会显示A
页:
[1]