如何在C程序中执行CMD命令?附问题代码寻求解答
在C程序中执行CMD命令的正确实现
我来帮你搞定这个问题,先梳理下你代码里的几个关键问题,再给你修正后的可行版本:
你的代码存在的核心问题
gets()函数不安全且已废弃:这个函数不会限制输入长度,很容易导致缓冲区溢出,现在C标准已经弃用它了,推荐用fgets()替代。- 字符串比较方式完全错误:你用
educode == 5678来判断输入是否正确,这完全不对——educode是字符数组的地址,5678是整数,类型不匹配就算了,字符串比较必须用strcmp()函数(需要引入<string.h>头文件)。 - 未处理输入的换行符:如果用
fgets()读取输入,它会把用户按下的回车键(\n)也读进数组里,直接和"5678"比较会失败,得手动去掉这个换行符。
修正后的完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char educode[100]; printf("Welcome To ACE-IT Edu Software!\n"); printf("\nPlease Type An Educator Code and then press enter.\n"); printf("Educator Code: "); // 用fgets读取输入,限制长度避免缓冲区溢出 fgets(educode, sizeof(educode), stdin); // 去掉fgets读取到的末尾换行符 size_t len = strlen(educode); if (len > 0 && educode[len - 1] == '\n') { educode[len - 1] = '\0'; } // 用strcmp比较字符串,相等时返回0 if (strcmp(educode, "5678") == 0) { // 执行CMD的mkdir命令创建目录 system("mkdir test"); printf("\nSuccess! Created test directory.\n"); } else { printf("\nSorry, that's not a valid Educator Code. To buy an Educator Code, go to our official website.\n"); } return 0; }
关键改动说明
- 替换
gets()为fgets(),指定读取的最大长度为数组大小,彻底避免缓冲区溢出风险。 - 引入
<string.h>头文件,使用strcmp()函数做字符串比较,这是C语言中字符串相等判断的标准方式。 - 处理
fgets()读取到的换行符,确保输入的代码和目标字符串"5678"完全匹配。 - 增加了成功执行后的提示,让用户能直观看到命令执行结果。
内容的提问来源于stack exchange,提问作者John O'Meara
相关产品推荐
相关产品推荐

