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

开发3D引擎C代码时嵌套结构体赋值顺序颠倒的问题求助

嵌套结构体赋值后printf输出顺序颠倒的问题解决

你的问题核心是printf参数与格式串不匹配引发的未定义行为:

循环中的printf语句里,格式串%d, %d, %d需要三个整数参数,但你只传入了一个struct vertexes类型的变量triangleTest.vertex[loop]。这种情况下,程序会从栈中读取超出传入参数范围的内存数据,最终出现看似顺序颠倒的错误输出。

错误代码片段

printf("Vertex coords = %d, %d, %d \n\n", triangleTest.vertex[loop]);

修复后的代码

你需要明确传入结构体的三个成员变量,而非整个结构体:

printf("Vertex coords = %d, %d, %d \n\n", 
       triangleTest.vertex[loop].x, 
       triangleTest.vertex[loop].y, 
       triangleTest.vertex[loop].z);

为什么会出现“顺序颠倒”?

这和系统小端字节序、栈内存的读取方式有关:struct vertexes的内存布局是连续存储x、y、z三个unsigned short(各占2字节)。当整个结构体被压入栈后,printf会按%d(4字节)的格式三次读取数据,导致成员字节被错误拼接,最终呈现出与赋值顺序相反的结果。但这只是未定义行为的一种表现,不同环境下可能出现崩溃、乱码等其他问题,务必保证printf格式串与参数的数量、类型严格匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:02:44