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::stringstream
    

    greetz, 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 scope
    

    mit

    #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 scope
    

    mit

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

Anmelden zum Antworten