gpt4 book ai didi

c++ - CMD无法正确读取输入字符

转载 作者:行者123 更新时间:2023-12-03 07:15:30 24 4
gpt4 key购买 nike

我尝试使用系统功能在应用程序中运行cmd命令,但我无法获得输出,因为我的Windows是意大利语,当我在system()函数中键入/来调用cmd时,实际上得到的是-而没有得到/我在自己的cmd中尝试了此操作并收到了它-相反,/,我尝试将chcp 437用于英语cmd,但是,此操作不起作用

system("net user xxx xxxx /add");
实际上它正在:
net user xxx xxxx -add
我只是不想在意大利语Windows中工作而实际上在其他语言中工作,如何解决此问题?

最佳答案

  • 切勿使用system()。您正在使用C++进行编程。由于您可以访问系统:D中的所有内容,因此无需使用system()system()毕竟是用C编写的。
    而且存在安全隐患:有人可以使用system()替换system()或您尝试运行的命令,并在系统中进行一些更改。
  • 您可以在使用以下方法调用system()之前更改代码中的代码页
    Windows.h中存在的SetConsoleOutputCP();1252是拉丁语代码页,意大利语应该可以。还有65001是utf-8代码页,应该也可以正常工作
  • 也可以选择在"new" Windows终端上运行程序,因为它是Unicode
  • 将字符串传递给system()而不是文字。这样,您可以确保在通话之前它具有所需的内容。
  • 是一个好习惯,在更改之前保存使用中的代码页,并在退出时将其还原

  • 一个C++示例
    这个程序
  • 接受命令数组
  •     const char* command[] =
    {
    "DIR .\\*.* /O:D",
    "NET USER /Add /?"
    };

    并在控制台上运行。这些命令使用斜杠和反斜杠并输出文本,因此您可以进行更多测试。您可以编辑数组并添加新命令进行测试
    您可以尝试其他代码页。在这里我使用了65001,这是Unicode
        int originalOCP = GetConsoleOutputCP();
    std::cout << "Original CodePage: " << originalOCP << "\n";

    SetConsoleOutputCP(65001);
    std::cout << "CodePage now is " << GetConsoleOutputCP() << "\n";
  • 在将命令传递给system()
  • 之前,它是在控制台上编写的
            std::cout <<
    "\n\n\t==> command " <<
    i << " is '" <<
    command[i] << "'\n\n";

    system(command[i]);
    葡萄牙语Windows中的输出
    Original CodePage: 850
    CodePage now is 65001


    ==> command 0 is 'DIR .\*.* /O:D'

    O volume na unidade C não tem nome.
    O Número de Série do Volume é 7E52-1BF2

    Pasta de C:\Users\toninho\source\repos\ConsoleApplication8\ConsoleApplication8

    29/10/2020 10:21 168 ConsoleApplication8.vcxproj.user
    29/10/2020 10:38 974 ConsoleApplication8.vcxproj.filters
    29/10/2020 10:38 7.199 ConsoleApplication8.vcxproj
    29/10/2020 10:59 676 a.cpp
    29/10/2020 10:59 <DIR> ..
    29/10/2020 10:59 <DIR> .
    29/10/2020 10:59 <DIR> Debug
    4 arquivo(s) 9.017 bytes
    3 pasta(s) 128.838.795.264 bytes disponíveis


    ==> command 1 is 'NET USER /Add /?'

    A sintaxe deste comando é:

    NET USER
    [nome de usuário [senha | *] [opções]] [/DOMAIN]
    nome de usuário {senha | *} /ADD [opções] [/DOMAIN]
    nome de usuário [/DELETE] [/DOMAIN]
    nome de usuário [/TIMES:{horários | ALL}]
    nome de usuário [/ACTIVE: {YES | NO}]

    CodePage now is 850
    编码
    #include <iostream>
    #include <windows.h>

    int main(int argc, char** argv)
    {
    const char* command[] =
    {
    "DIR .\\*.* /O:D",
    "NET USER /Add /?"
    };

    int originalOCP = GetConsoleOutputCP();
    std::cout << "Original CodePage: " << originalOCP << "\n";

    SetConsoleOutputCP(65001);
    std::cout << "CodePage now is " << GetConsoleOutputCP() << "\n";

    for (int i = 0; i < sizeof(command) / sizeof(char*); i += 1)
    {
    std::cout <<
    "\n\n\t==> command " <<
    i << " is '" <<
    command[i] << "'\n\n";

    system(command[i]);
    };

    SetConsoleOutputCP(originalOCP);
    std::cout << "CodePage now is " << GetConsoleOutputCP() << "\n";

    return 0;
    }

    关于c++ - CMD无法正确读取输入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64581229/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com