【问题标题】:C++ Turn Off a PC within a specified timeframe given by a variable [closed]C ++在变量给定的指定时间范围内关闭PC [关闭]
【发布时间】:2020-10-31 16:59:00
【问题描述】:

我尝试使用具有不同数据类型的代码变体,在变量告诉的时间内用 C++ 关闭我的计算机。它不起作用。

system("shutdown -s -t %Charseconds");

system("shutdown -s -t %Intseconds");

system("shutdown -s -t %Stringseconds");


system("shutdown -t %Charseconds");

system("shutdown -t %Intseconds");

system("shutdown -t %Stringseconds");

最小可重复性:

TurnOff(int seconds) 
{
    seconds = 10;
    string str = to_string(seconds);
    system("shutdown - s - t " + str);
}

错误:没有合适的转换函数来自“std::basic_string, std::allocator>" 到 "const char *"

【问题讨论】:

    标签: c++ windows operating-system system


    【解决方案1】:

    system() 不知道如何格式化这样的参数。它接收 C 风格的 char* 字符串并将其按原样传递给 cmd.exe(作为 /C 开关的参数)。因此,在将字符串传递给system() 之前 使用变量输入格式化字符串是您的责任。

    您可以使用c_str() 方法将std::string 传递给system(),例如:

    void TurnOff(int seconds)
    {
        std::string str = "shutdown -s -t " + std::to_string(seconds);
        system(str.c_str());
    }
    

    话虽如此,请考虑使用Task Scheduler API 来调用关闭,而不是使用system()

    【讨论】:

    • @PageUp 那么你没有正确使用它,但你没有提供一个minimal reproducible example 来证明什么不适合你。
    • @PageUp 所有任何人都可以根据您的显示来回答。如果您展示的内容明显有误,您将得到明显的答案或进行钓鱼探险,以找出您真正的错误所在。
    • @PageUp 您需要创建一个minimal reproducible example 并将其发布在您的问题中
    • 提交修改
    • @PageUp 我已经在我的答案示例中介绍了该错误的解决方案。您需要使用std::string::c_str()。我已经更新了我的答案,以在您的编辑上下文中显示这一点
    【解决方案2】:

    shutdown - s - t " + str 的结果是std::stringsystem 需要一个常量 C 字符串 (const char *)。你必须转换它,例如与:

    system(("shutdown - s - t " + str).c_str());
    

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 1970-01-01
      • 2022-01-25
      • 2014-09-13
      • 1970-01-01
      • 2017-11-03
      • 2017-06-02
      • 2013-05-23
      • 2020-11-30
      相关资源
      最近更新 更多