在 C++ 中从 FILE 结构解析为字符串
Posted
技术标签:
【中文标题】在 C++ 中从 FILE 结构解析为字符串【英文标题】:Parse from FILE structure to string in C++ 【发布时间】:2014-01-11 16:09:14 【问题描述】:我正在尝试使用以下代码在 Windows 上捕获系统命令,以将输出作为字符串返回。
std::string exec(char* cmd)
FILE* pipe = _popen(cmd, "r");
if (!pipe) return "ERROR";
std::ifstream ifs(pipe);
std::string content( (std::istreambuf_iterator<char>(ifs) ),
(std::istreambuf_iterator<char>() ) );
printf("%s", content);
return content;
当我这样调用函数时:
char *command = "set";
std::string results = exec(command);
printf("%s", results);
getchar();
输出只是几个随机字节。
╝÷:ö°:
我试图将所有结果附加到 1 个长字符串中。谁能告诉我我做错了什么? 我尝试使用命令将 stderr 重定向到输出,但它也给出了一些随机字节。
【问题讨论】:
这还能编译吗?标准库中没有std::ifstream
constructor,它采用FILE
指针。
【参考方案1】:
由于您使用的 printf()
对 C++ std::string
值一无所知,因此您需要打印 content
的 C 字符串表示形式:
printf("%s", content.c_str());
printf()
函数被告知要这样,但它不是你传递给它的。
或者,正如其他人指出的那样,您应该使用本机 C++ I/O:
std::cout << content;
【讨论】:
【参考方案2】:Printf 需要 C 字符串,char*
。
使用
printf("%s",results.c_str());
【讨论】:
【参考方案3】:不要使用printf
,而是使用 C++ 标准输出流:
std::cout << content << '\n';
【讨论】:
以上是关于在 C++ 中从 FILE 结构解析为字符串的主要内容,如果未能解决你的问题,请参考以下文章