下面是我的代码(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;
}
答案 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
}
这个库包含更多这样的包装器,如果它们符合您的需要,欢迎您使用它们。