如何将字符串返回到主INT函数

How to return a string to the main int function?

本文关键字:INT 函数 返回 字符串      更新时间:2023-10-16

这是下面我的代码(C )...我对如何返回getusername中检索到主函数的用户名感到困惑。有人有否决提示或建议吗?

#include <iostream>
//For the strings obviously
#include <string>
using namespace std;
string getusername();
string user;

string getusername() {
    user = system("echo %username% > NUL");
    return user;
}

int main() {
    string getname;
    getname = getusername();
    cout << "Hello: "<< getname << endl;
}

return语句应起作用。但是,

user = system("echo %username% > NUL");

是一个问题。请参阅std::system的文档以了解其作用。

如果您希望用户输入usre的值,则有两个选项。如果您希望user的价值没有空格,则可以使用:

std::cout >> user;

如果您希望user的值包含整个文本,whitespace等,请使用:

std::getline(std:::cout, user);

如果要使用获取环境变量的值USERNAME,请使用std::getenv

user = std::getenv("USERNAME");

来自http://www.cplusplus.com/reference/cstdlib/system/

返回值

如果命令是null指针,则该函数返回非零值,以防命令处理器可用,如果不是命令,则零值。

如果命令不是零指针,则返回的值取决于系统和库实现,但通常期望它是由调用命令返回的状态代码,如果支持。

如果要运行系统命令并捕获输出,则可以使用Popen。

一个简单的例子看起来像这样。

std::string exec(const std::string& cmd) {
    std::array<char, 128> buffer;
    std::string result;
    std::shared_ptr<FILE> pipe(popen(cmd.c_str(), "r"), pclose);
    if (!pipe) throw std::runtime_error("popen() failed!");
    while (fgets(buffer.data(), 128, pipe.get()) != nullptr)
        result += buffer.data();
    return result;
}

正如其他人已经指出的,std ::系统调用不是互动的,这意味着您无法从/到shell。

我已经为POSIX符合POSIX的操作系统实现了一个不错的Popen()包装器,该操作系统允许用户轻松与Shell进行交互,您可以在此处检查。

这是一个用法示例:

try {
    mp::ipstream reader("ls -l");
    vector<string> output;
    reader >> output;
}
catch (std::runtime_error & ex) {
    // Something went wrong and ex.what() will tell you what it is
}

此库包含更多此类包装器,如果您需要您的需求,您非常欢迎您使用它们。