Ich habe versucht, den folgenden Code zu kompilieren (von https://stackoverflow.com/a/478960/683218). Die Kompilierung ging in Ordnung, wenn ich mitmingw: funktion nicht gefunden, wenn mit -std = C++ 11
$ g++ test.cpp
kompilieren aber ging schief, wenn der -std=c++11
Schalter verwendet wird:
$ g++ -std=c++11 test.cpp
test.cpp: In function 'std::string exec(char*)':
test.cpp:6:32: error: 'popen' was not declared in this scope
FILE* pipe = popen(cmd, "r");
^
Jede Idee, was los ist?
(Ich verwende mingw32 gcc4.8.1 von mingw.org und auf WindowsXP64)
Code:
#include <string>
#include <iostream>
#include <stdio.h>
std::string exec(char* cmd) {
FILE* pipe = popen(cmd, "r");
if (!pipe) return "ERROR";
char buffer[128];
std::string result = "";
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}
int main() {}
Unrelated auf Ihren * Strom * Problem, aber nicht tun, '', während, wird es nicht funktionieren wie erwartet (feof (...)!) es zu. Der Grund dafür ist, dass das 'EOF'-Flag nicht gesetzt wird, bevor * Sie * versuchen, über das Ende der Datei hinaus zu lesen, so dass Sie zu vielen Iterationen übergehen. Stattdessen in Ihrem Fall einfach 'while (fgets (...)! = 0)'. Dies ist auch beim Lesen von C++ - Streams der Fall. –