开发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
相关产品推荐
相关产品推荐

