鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 6

[已解决]C语言中struct指针的问题

[复制链接]
发表于 2019-9-27 14:17:23 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 一点都不鱼的鱼 于 2019-9-27 14:20 编辑

小弟遇到了这样一个问题:在程序里先定义了一个结构体 A a,又定义了一个结构体指针 A *pa = &a。然后在后面的1~2个函数中传入指针,函数正常执行到此为止一切正常。函数执行完之后,用scanf接收了一个与结构体无关的变量,这时候发现结构体的指针的值发生了改变。 请问各位大佬,为什么会出现这种情况?不胜感激~
最佳答案
2019-9-27 14:17:24
本帖最后由 yuweb 于 2019-9-27 15:39 编辑

你的uint8_t是不是unsigned char的别名

uint16_t %hu

uint32_t %u

uint64_t %llu

uint8_t  %c

最佳答案

查看完整内容

你的uint8_t是不是unsigned char的别名 uint16_t %hu uint32_t %u uint64_t %llu uint8_t %c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 14:17:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 yuweb 于 2019-9-27 15:39 编辑

你的uint8_t是不是unsigned char的别名

uint16_t %hu

uint32_t %u

uint64_t %llu

uint8_t  %c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 14:28:53 | 显示全部楼层
可能函数里修改了指针,能否贴上来代码看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-27 14:37:25 | 显示全部楼层
本帖最后由 一点都不鱼的鱼 于 2019-9-27 14:39 编辑

部分代码附上,执行完函数之后指针没有改变。不知道是否和我scanf接收时,用的%u有关,对这个不太了解
  1.         uint8_t quadrant;
  2.         char input[1024]= {'\0'};
  3.         uint8_t bmp1_data[MAX_FILE];
  4.         uint32_t startX,startY;
  5.         Bmp_Instance bmp1,*bmp1_ptr;
  6.         bmp1_ptr = &bmp1;
  7.         bmp1_ptr->bdata = bmp1_data;
  8.         while(1)
  9.         {
  10.                 do{
  11.                         printf("请输入要读入的BMP24位文件路径和文件名:\n");
  12.                         scanf("%s",&input);
  13.                 }while(BmpInfoGetter(input,bmp1_ptr)==FAILED);
  14.                 //BmpInfoPrint(bmp1_ptr);
  15.                 printf("请输入需要生成代码硬件设备的象限(1,3):\n");//执行到此处时,bmp1_ptr指针值还是正常的。
  16.                 scanf("%u",&quadrant);//scanf接收数据后,这里指针的值就发生了改变。
  17.                 printf("请输入需要生成代码初始X坐标(值最小的x坐标):\n");
  18.                 scanf("%u",&startX);
  19.                 printf("请输入需要生成代码初始Y坐标(值最小的y坐标):\n");
  20.                 scanf("%u",&startY);
  21.                 printf("正在生成中...............\n");
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 15:06:28 | 显示全部楼层
本帖最后由 superbe 于 2019-9-27 16:19 编辑

试下scanf("%c",&quadrant);执行后指针正常吗,quadrant -= 48;
或者不输入,直接给quadrant赋个值测试一下,quadrant=1;

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一点都不鱼的鱼 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-27 15:45:56 | 显示全部楼层
yuweb 发表于 2019-9-27 15:37
你的uint8_t是不是unsigned char的别名

uint16_t %hu

对,谢谢。这个很有用,uint8_t能直接用scanf接收数字吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-27 16:01:08 | 显示全部楼层
一点都不鱼的鱼 发表于 2019-9-27 15:45
对,谢谢。这个很有用,uint8_t能直接用scanf接收数字吗?

理论上是可以的,会根据ASCII码转换,比如输入65,然后用%c输出时会显示A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 21:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表