这是一个在 Windows 环境下初学者非常常用,但在专业开发中应该尽量避免使用的函数。

(图片来源网络,侵删)
system("pause") 是什么?
system("pause") 是一个 C 标准库函数调用,它由两部分组成:
-
system()函数:- 头文件:
#include <stdlib.h> - 功能: 执行一个操作系统的命令。
- 原型:
int system(const char *command); - 工作原理: 它会启动一个子进程(child process),在这个子进程中执行你传入的
command字符串所代表的命令。system()函数会等待这个子进程执行完毕,并返回子进程的退出状态。
- 头文件:
-
"pause"命令:- 这是一个Windows 操作系统特有的命令行指令。
- 功能: 在 Windows 的命令提示符(CMD)窗口中执行时,它会显示 "请按任意键继续. . ." (Press any key to continue . . .) 并暂停程序的执行,直到用户按下任意一个键。
- 工作原理: 它会读取用户的键盘输入,直到有输入为止。
system("pause") 的完整含义是:
“请操作系统启动一个新进程,去执行 pause 这个命令,并等待它结束。”

(图片来源网络,侵删)
如何使用
要使用 system("pause"),你需要包含 <stdlib.h> 头文件。
#include <stdio.h> // 为了 printf
#include <stdlib.h> // 为了 system
int main() {
printf("程序正在运行...\n");
printf("做一些事情...\n");
// 在这里调用 system("pause")
system("pause"); // 程序会在这里暂停,等待用户按键
printf("感谢您的使用!程序结束,\n");
return 0;
}
编译和运行(在 Windows 上):
- 将代码保存为
test.c。 - 使用 MinGW (GCC) 或 Visual Studio 编译器进行编译:
gcc test.c -o test.exe
- 运行生成的可执行文件:
test.exe
你会看到控制台输出:
程序正在运行...
做一些事情...
请按任意键继续. . .
程序会一直停在这里,直到你按下任意键,然后才会继续执行最后一行 printf。

(图片来源网络,侵删)
优点和缺点
优点
- 简单易用:对于初学者来说,这是实现“程序暂停”功能最简单、最直接的方法,一行代码就能解决问题。
- 无需关心平台细节:在 Windows 上,它确实能实现暂停功能。
缺点 (非常重要!)
这是为什么在专业开发中不推荐使用它的原因:
-
可移植性差 (Portability Issue):
"pause"是Windows 独有的命令,如果你把这段代码拿到 Linux 或 macOS 上编译运行,system("pause")会尝试执行pause命令,而这个命令在 Linux/macOS 上不存在。- 这会导致程序行为不确定:在 Linux/macOS 上,它会打印出类似 "sh: pause: command not found" 的错误信息,然后不会暂停,直接继续执行,这使得你的代码无法跨平台运行。
-
安全性风险 (Security Risk):
system()函数会调用系统的命令行解释器(在 Windows 上是cmd.exe,在 Linux 上是/bin/sh)。- 如果你的程序(特别是网络服务或接受用户输入的程序)中,
system()的参数来自不可信的输入,攻击者就可能构造恶意命令来执行任意代码,这是非常危险的。 - 虽然硬编码的
"pause"是安全的,但它培养了使用system()的不良习惯。
-
效率低下 (Inefficiency):
system("pause")的代价很高,它需要创建一个全新的进程,加载命令行解释器(cmd.exe),然后解释器再去执行pause命令。- 这个过程比在程序内部直接等待用户输入要慢得多,也消耗更多资源。
-
用户体验不佳 (Poor User Experience):
- 它会弹出一个黑色的控制台窗口,如果程序是从图形界面启动的,这个窗口的出现会很突兀。
- 它输出的提示语 "请按任意键继续..." 是英文的,对于中文用户来说不够友好。
更好的替代方案
根据你的目标平台,有更好的、更专业的实现方式。
跨平台方案 (推荐)
使用标准 C 库函数 getchar() 来实现,它会从标准输入(通常是键盘)读取一个字符,并等待直到有输入。
#include <stdio.h>
int main() {
printf("程序正在运行...\n");
printf("做一些事情...\n");
printf("按 Enter 键继续...\n");
getchar(); // 程序会在这里暂停,直到用户按下回车
printf("感谢您的使用!程序结束,\n");
return 0;
}
优点:
- 高度可移植:任何支持标准 C 库的操作系统(Windows, Linux, macOS 等)都能正常工作。
- 高效安全:不创建新进程,直接在当前程序中等待输入,没有安全风险。
- 简洁:代码同样非常简单。
缺点:
- 如果用户在
getchar()之前输入了内容,那么它会直接读取缓冲区里已有的字符,而不是等待新的输入,不过对于简单的演示程序,这通常不是问题。
Windows 原生方案 (如果只针对 Windows)
如果你确定你的程序只在 Windows 上运行,可以使用 Windows API 函数 system("pause") 的替代品,getch()。
getch() (get character) 是一个非标准函数,但在 Windows 的 <conio.h> 头文件中定义。
#include <stdio.h>
#include <conio.h> // 包含 getch() 函数的头文件
int main() {
printf("程序正在运行...\n");
printf("做一些事情...\n");
printf("按任意键继续...\n");
getch(); // 程序会在这里暂停,直到用户按下任意一个键(不需要按回车)
printf("感谢您的使用!程序结束,\n");
return 0;
}
优点:
- 高效:直接读取键盘输入,不涉及进程创建。
- 用户体验更好:用户按下任意键(包括回车、空格、方向键等)程序都会立即响应,无需按回车。
缺点:
- 可移植性差:
<conio.h>和getch()是 Borland C 和 Microsoft Visual C++ 等编译器特有的,在 GCC (Linux/macOS) 上无法使用。
| 特性 | system("pause") |
getchar() |
getch() |
|---|---|---|---|
| 可移植性 | 差 (仅 Windows) | 好 (跨平台) | 差 (仅 Windows) |
| 安全性 | 低 (有风险) | 高 | 高 |
| 效率 | 低 | 高 | 高 |
| 使用难度 | 非常简单 | 简单 | 简单 |
| 依赖 | stdlib.h |
stdio.h |
conio.h (非标准) |
| 推荐场景 | 不推荐,仅用于快速 Windows 测试 | 强烈推荐,用于通用、跨平台的程序 | 仅用于需要高性能键盘输入的 Windows 程序 |
- 如果你是初学者,正在学习 C 语言:请避免使用
system("pause"),从一开始就养成使用getchar()的好习惯,这样你的代码会更专业、更健壮。 - 如果你正在开发一个跨平台的项目:必须使用
getchar()或其他跨平台的输入方法。 - 如果你只开发 Windows 程序,且对性能有要求:可以考虑使用
getch(),但要清楚它的局限性。
