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

