鱼C论坛

 找回密码
 立即注册
查看: 1892|回复: 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有关,对这个不太了解
        uint8_t quadrant;
        char input[1024]= {'\0'};
        uint8_t bmp1_data[MAX_FILE];
        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");
想知道小甲鱼最近在做啥?请访问 -> 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-10-4 11:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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