You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言结构体变量赋值后输出乱码是什么原因

错误根因

你的结构体定义、头文件写法、结构体成员访问逻辑全都是正确的,乱码问题和结构体用法无关,是printf的格式占位符与参数类型不匹配导致的未定义行为。

具体细节:

  • 你定义的arr是double类型数组,给a.arr[1]赋值2.5的操作完全合法,内存里存储的值本身是正确的。
  • %d是printf用来解析int类型整数的占位符,你传入的是8字节长度的double类型浮点数,printf会按照int的内存布局规则去读取对应位置的字节,最终解析出的值自然是无意义的乱码。
修复方法

将打印语句中的%d替换为适配double类型的%f占位符即可(C标准中printf处理可变参数时,float会自动提升为double,因此%f同时适配float和double类型,用%lf也可以,二者效果完全一致)。

修正后的核心代码:

int main(){
        quaternion a;
        a.arr[1]=2.5;
        printf("%f\n",a.arr[1]);
        return 0;
}

补充提示:printf是可变参数函数,默认不会对传入参数和占位符做严格的类型校验,很多时候编译不会直接报错,只会在运行时出现异常,写代码时一定要保证占位符和传入参数类型严格对应,常见对应关系:

  • int类型整数:%d
  • float/double浮点数:%f
  • char类型字符:%c
  • 字符串(char*):%s
  • 指针地址:%p

内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:27:15