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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:32:21