C语言已完成变量初始化仍输出随机值,是否为编译器故障?
问题结论
首先可以确定不是gcc编译器故障,该问题均为本地操作或实际运行的代码和你贴出的版本不一致导致的。
常见原因
- 代码修改后未保存:你编辑完成的代码没有写入磁盘,gcc编译的是修改前的旧版本代码。如果旧版本中
a、b未初始化就直接printf输出,未初始化的局部变量值为随机栈垃圾数据,就会出现你看到的随机数值。 - 运行的是残留的旧可执行文件:你当前目录下可能存在之前编译生成的
hello.exe残留,如果本次编译因为报错没有生成新的可执行文件,你实际执行的就是旧的错误程序。你可以先手动删除目录下所有hello.exe文件,再重新执行编译命令验证。 - 本地源文件存在全角符号错误:你贴出的代码逻辑是完全正确的,但如果本地实际保存的源文件里有全角符号(比如全角引号、全角百分号、全角逗号),会导致
printf的格式串解析错误,也会出现异常输出。
你可以将编译命令替换为
gcc -Wall hello.c -o hello开启全部编译警告,如果存在变量未初始化、格式串不匹配等问题,编译器会直接输出提示帮你快速定位问题。
补充说明:你贴出的代码预期输出是两个数字用逗号分隔,但实际运行只输出了一个随机数,也能直接证明你运行的可执行文件不是当前贴出的代码编译得到的。
内容的提问来源于stack exchange,提问作者Siddharth Juyal
相关产品推荐
相关产品推荐

