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

C语言函数返回结构体后在main函数打印内容为乱码问题求助

问题根因

代码的核心错误是scanf调用时没有传递变量的地址,具体问题如下:

  • C语言中scanf读取输入时,要求传入待赋值变量的内存地址,你当前直接传入e.a、e.b、e.c三个int类型的值,相当于把这三个未初始化的随机值当成内存地址传入,scanf会尝试向非法内存地址写入数据,结构体成员没有被正确赋值,最终打印的就是未初始化的垃圾值也就是你看到的乱码。
  • 额外规范问题:C标准规定main函数的返回值应为int类型,而非void。

修正后代码

#include <stdio.h>
struct etudiant
{
    int a;
    int b;
    int c;
};
typedef struct etudiant ETD;

ETD ajouter_etd()
{
    ETD e;
    // 传入结构体成员的地址
    scanf("%i%i%i", &e.a, &e.b, &e.c);
    return e;
}

int main()
{
    ETD e;
    e = ajouter_etd();
    printf("%i %i %i", e.a, e.b, e.c); // 加空格分隔输出更易读,可按需调整
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:10