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

时间:2017-09-24 19:44:25

标签: c++

下面是我的代码(C ++)...我对如何将getusername中检索到的用户名返回给main函数感到困惑。有没有人有任何提示或建议?

#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;
}

3 个答案:

答案 0 :(得分:2)

return语句应该有效。但是,

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

是个问题。请参阅documentation of std::system以了解它的作用。

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

std::cout >> user;

如果您希望user的值包含整行文本,空格和全部,请使用:

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

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

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

答案 1 :(得分:2)

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

  

返回值

     

如果command是空指针,则该函数在命令处理器可用时返回非零值,如果不是则返回零值。

     

如果command不是空指针,则返回的值取决于系统和库实现,但如果支持,通常应该是被调用命令返回的状态代码。

如果要运行系统命令并捕获输出,可以使用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;
}

答案 2 :(得分:0)

由于其他人已经指出,std :: system调用不是交互式的,这意味着你无法从/读取/写入shell。

我为Posix兼容的操作系统实现了一个很好的popen()包装器,允许用户轻松地与shell进行交互,你可以查看它here

以下是一个用法示例:

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
}

这个库包含更多这样的包装器,如果它们符合您的需要,欢迎您使用它们。