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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:51:42