printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion
-
Das wäre mir auch lieber, als die IO C-Sachen. Welche IO-Stream-Alternativen würden denn passen, um printf in diesem konkreten Beispiel zu ersetzen?
-
std::stringstreamgreetz, Swordfish
-
Wenn du mehr wissen willst, wirf mal einen Blick in meinen Magazin-Artikel zum Thema "Ein- und Ausgabe in C++".
-
Werd mal schauen...
-
Habs jetzt mal so gelöst. Habs in eine eigene Funktion gelegt und diese in main aufgerufen. Der Rest ist geblieben. Wäre das OK?
string getMacAddr(void) { char tmp[18]; string mac_addr, mac_tmp; long stat; int i; u_char addr[6]; stat = mac_addr_sys( addr); if (0 == stat) { for (i=0; i<6; ++i) { sprintf(tmp,"%0.2x:",addr[i] ); mac_tmp = (string)tmp; mac_addr = mac_addr + mac_tmp; } } else { mac_addr ="not found"; } return mac_addr.substr(0,17); } int main( int argc, char **argv) { cout<<"Found MAC-Address: "<< getMacAddr()<<endl; return 0; }
-
Ja, das ist sicher eine Möglichkeit, aber arg kompliziert. Ich hätte ja auf printf() komplett verzichtet und stattdessen einen stringstream verwendet:
if(stat==0) { stringstream mac_tmp; for(int i=0;i<6;++i) mac_tmp<<hex<<setw(2)<<(int)addr[i]<<':'; return mac_tmp.str(); }
-
Danke. Ich hab Deinen Tipp mal versucht, bekomme bei setw einen Fehler.
'setw' was not declared in this scopemit
#include <iomanip>gehts dann auch durch.
Die Ausgabe ist allerdings unsauber, der spuckt mir das raus:
Found MAC-Address: 0: c:29:90:72:9c:
Fehlt da noch was?
-
setfill('0')
-
dixidix schrieb:
Danke. Ich hab Deinen Tipp mal versucht, bekomme bei setw einen Fehler.
'setw' was not declared in this scopemit
#include <iomanip>gehts dann auch durch.
Sorry, aber ich hab' dich für intelligent genug gehalten, die benötigten Header selber zu finden

Die Ausgabe ist allerdings unsauber, der spuckt mir das raus:
Found MAC-Address: 0: c:29:90:72:9c:
Fehlt da noch was?
Wenn dich die Leerzeichen stören, hilft vermutlich setfill(). Wenn du Probleme mit dem Doppelpunkt hast, kannst du dir mac_tmp.str() auch nehmen und nach Bedarf zurechtschneiden.
-
Danke so klappts:
string getHomeAddr(void) { char tmp[18]; string home_addr, home_tmp; long stat; int i; u_char addr[6]; stat = home_addr_sys( addr); if (0 == stat) { stringstream home_tmp; for(int i=0;i<6;++i) home_tmp<<hex<<setfill('0')<<setw(2)<<(int)addr[i]<<':'; return home_tmp.str().substr(0,17); } else { return "not found"; } }