VS2017二次编译时出现'getch'未定义错误的技术问询
解决Visual Studio 2017中
getch()未定义的问题 咱们来拆解下你遇到的问题:原本代码里的getch()能正常运行,可添加strcpy_S相关逻辑后,突然弹出了'getch' undefined的报错。这背后主要有两个核心原因,对应两种解决思路:
1. 显式引入必要的头文件
getch()并不是C标准库函数,它是微软为Visual Studio提供的控制台专用输入函数,定义在<conio.h>头文件中。你最初的代码能运行,大概率是旧版VS的默认设置里,其他头文件(比如<stdio.h>)间接包含了<conio.h>;但引入strcpy_S(需要依赖<string.h>)后,头文件的依赖链发生了变化,导致<conio.h>不再被隐式加载。
解决办法很直接,在代码开头手动添加<conio.h>的引入:
#include <stdio.h> #include <string.h> #include <conio.h> // 新增这个头文件 void main() { char abc[100]; strcpy_S(abc, "premraj"); printf("%s", abc); printf("abcdefgh %d hjhjh %d", 5, 6); getch(); }
2. 使用VS推荐的替代函数
在Visual Studio 2017及以后的版本中,getch()被标记为过时(deprecated),微软官方推荐使用_getch()(带下划线的版本)来替代,它的功能和getch()完全一致,只是更符合现代C标准的命名规范。
修改后的代码示例:
#include <stdio.h> #include <string.h> #include <conio.h> void main() { char abc[100]; strcpy_S(abc, "premraj"); printf("%s", abc); printf("abcdefgh %d hjhjh %d", 5, 6); _getch(); // 替换为_getch() }
额外小建议:规范main函数写法
顺便提一句,void main()并不是C语言标准定义的入口函数写法,标准C规定main函数应返回int类型。虽然VS允许void main(),但为了代码的可移植性,建议改成:
int main() { // 你的业务代码... _getch(); return 0; // 添加标准返回值 }
内容的提问来源于stack exchange,提问作者Kanishk Viman
相关产品推荐
相关产品推荐

