<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion]]></title><description><![CDATA[<p>Sicherlich nur eine Kleinigkeit, aber ich hoffe es kann mir jemand helfen:</p>
<p>Ich habe im Code hier eine printf-Ausgabe, möchte diese aber auch als Variable bzw. als Rückgabe einer Funktion nutzen.<br />
In diesem Beispiel wäre es die Mac-Adresse, die in main() ausgegeben wird. Wie kann ich das als Wert in eine Variable übergeben? Danke im Voraus.</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;unistd.h&gt;

#include &lt;sys/ioctl.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;linux/if.h&gt;

long mac_addr_sys ( u_char *addr)
{
    struct ifreq ifr;
    struct ifreq *IFR;
    struct ifconf ifc;
    char buf[1024];
    int s, i;
    int ok = 0;

    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s==-1) 
	{
        return -1;
    }

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = buf;
    ioctl(s, SIOCGIFCONF, &amp;ifc);

    IFR = ifc.ifc_req;
    for (i = ifc.ifc_len / sizeof(struct ifreq); --i &gt;= 0; IFR++)
	{
        strcpy(ifr.ifr_name, IFR-&gt;ifr_name);
        if (ioctl(s, SIOCGIFFLAGS, &amp;ifr) == 0) 
		{
            	if (! (ifr.ifr_flags &amp; IFF_LOOPBACK)) 
				{
                	if (ioctl(s, SIOCGIFHWADDR, &amp;ifr) == 0) 
					{
                    ok = 1;
                    break;
                	}
            	}
        }
    }

    close(s);
    if (ok)
	{
        bcopy( ifr.ifr_hwaddr.sa_data, addr, 6);
    }
    else
	{
        return -1;
    }
    return 0;

}

int main( int argc, char **argv)
{
	long stat;
    int i;
    u_char addr[6];

    stat = mac_addr_sys( addr);

    if (0 == stat)
	{
        for (i=0; i&lt;6; ++i)
			{
            printf(&quot;%2.2x &quot;, addr[i]);//Diese Ausgabe wird benötigt
        	}
        printf( &quot;\n&quot;);
    }
    else 
	{
        fprintf( stderr, &quot;can't get eth-ID\n&quot;);
        exit( 1);
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/181576/printf-ausgabe-auch-als-variable-bzw-rückgabewert-einer-funktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 10:10:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181576.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 May 2007 09:38:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Tue, 15 May 2007 09:38:51 GMT]]></title><description><![CDATA[<p>Sicherlich nur eine Kleinigkeit, aber ich hoffe es kann mir jemand helfen:</p>
<p>Ich habe im Code hier eine printf-Ausgabe, möchte diese aber auch als Variable bzw. als Rückgabe einer Funktion nutzen.<br />
In diesem Beispiel wäre es die Mac-Adresse, die in main() ausgegeben wird. Wie kann ich das als Wert in eine Variable übergeben? Danke im Voraus.</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;unistd.h&gt;

#include &lt;sys/ioctl.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;linux/if.h&gt;

long mac_addr_sys ( u_char *addr)
{
    struct ifreq ifr;
    struct ifreq *IFR;
    struct ifconf ifc;
    char buf[1024];
    int s, i;
    int ok = 0;

    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s==-1) 
	{
        return -1;
    }

    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = buf;
    ioctl(s, SIOCGIFCONF, &amp;ifc);

    IFR = ifc.ifc_req;
    for (i = ifc.ifc_len / sizeof(struct ifreq); --i &gt;= 0; IFR++)
	{
        strcpy(ifr.ifr_name, IFR-&gt;ifr_name);
        if (ioctl(s, SIOCGIFFLAGS, &amp;ifr) == 0) 
		{
            	if (! (ifr.ifr_flags &amp; IFF_LOOPBACK)) 
				{
                	if (ioctl(s, SIOCGIFHWADDR, &amp;ifr) == 0) 
					{
                    ok = 1;
                    break;
                	}
            	}
        }
    }

    close(s);
    if (ok)
	{
        bcopy( ifr.ifr_hwaddr.sa_data, addr, 6);
    }
    else
	{
        return -1;
    }
    return 0;

}

int main( int argc, char **argv)
{
	long stat;
    int i;
    u_char addr[6];

    stat = mac_addr_sys( addr);

    if (0 == stat)
	{
        for (i=0; i&lt;6; ++i)
			{
            printf(&quot;%2.2x &quot;, addr[i]);//Diese Ausgabe wird benötigt
        	}
        printf( &quot;\n&quot;);
    }
    else 
	{
        fprintf( stderr, &quot;can't get eth-ID\n&quot;);
        exit( 1);
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1285225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285225</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Tue, 15 May 2007 09:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Tue, 15 May 2007 09:44:22 GMT]]></title><description><![CDATA[<p>printf() hat auch einige (kleine) Brüder wie fprintf() (gibt in ein FILE aus) oder sprintf() (schreibt in ein char-Array) - ich glaube, du benötigst letzteres.</p>
<p>Ansonsten: Da wir hier im C++ Board sind, solltest du lieber umsteigen auf IO-Streams <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> (die sind sicherer, einfacher zu handhaben und flexibler als printf() und Co.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285231</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 15 May 2007 09:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Tue, 15 May 2007 09:49:55 GMT]]></title><description><![CDATA[<p>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?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285234</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Tue, 15 May 2007 09:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Tue, 15 May 2007 09:52:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::stringstream
</code></pre>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285237</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 15 May 2007 09:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Tue, 15 May 2007 09:55:24 GMT]]></title><description><![CDATA[<p>Wenn du mehr wissen willst, wirf mal einen Blick in meinen Magazin-Artikel zum Thema &quot;Ein- und Ausgabe in C++&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285240</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 15 May 2007 09:55:24 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Tue, 15 May 2007 09:56:32 GMT]]></title><description><![CDATA[<p>Werd mal schauen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285243</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Tue, 15 May 2007 09:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Wed, 16 May 2007 07:06:47 GMT]]></title><description><![CDATA[<p>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?</p>
<pre><code class="language-cpp">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&lt;6; ++i)
			{
			sprintf(tmp,&quot;%0.2x:&quot;,addr[i] );	
			mac_tmp = (string)tmp;
			mac_addr = mac_addr + mac_tmp;					
        	}
    }
    else 
	{
        mac_addr =&quot;not found&quot;;
    }
	return mac_addr.substr(0,17);
}	

int main( int argc, char **argv)
{
	cout&lt;&lt;&quot;Found MAC-Address: &quot;&lt;&lt; getMacAddr()&lt;&lt;endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1285876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285876</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Wed, 16 May 2007 07:06:47 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Wed, 16 May 2007 07:17:32 GMT]]></title><description><![CDATA[<p>Ja, das ist sicher eine Möglichkeit, aber arg kompliziert. Ich hätte ja auf printf() komplett verzichtet und stattdessen einen stringstream verwendet:</p>
<pre><code class="language-cpp">if(stat==0)
{
  stringstream mac_tmp;
  for(int i=0;i&lt;6;++i)
    mac_tmp&lt;&lt;hex&lt;&lt;setw(2)&lt;&lt;(int)addr[i]&lt;&lt;':';
  return mac_tmp.str();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1285884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285884</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 16 May 2007 07:17:32 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Wed, 16 May 2007 07:49:50 GMT]]></title><description><![CDATA[<p>Danke. Ich hab Deinen Tipp mal versucht, bekomme bei setw einen Fehler.</p>
<pre><code>'setw' was not declared in this scope
</code></pre>
<p>mit</p>
<pre><code class="language-cpp">#include &lt;iomanip&gt;
</code></pre>
<p>gehts dann auch durch.</p>
<p>Die Ausgabe ist allerdings unsauber, der spuckt mir das raus:</p>
<blockquote>
<p>Found MAC-Address: 0: c:29:90:72:9c:</p>
</blockquote>
<p>Fehlt da noch was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285909</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Wed, 16 May 2007 07:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Wed, 16 May 2007 07:50:42 GMT]]></title><description><![CDATA[<p>setfill('0')</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285910</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 16 May 2007 07:50:42 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Wed, 16 May 2007 08:00:03 GMT]]></title><description><![CDATA[<p>dixidix schrieb:</p>
<blockquote>
<p>Danke. Ich hab Deinen Tipp mal versucht, bekomme bei setw einen Fehler.</p>
<pre><code>'setw' was not declared in this scope
</code></pre>
<p>mit</p>
<pre><code class="language-cpp">#include &lt;iomanip&gt;
</code></pre>
<p>gehts dann auch durch.</p>
</blockquote>
<p>Sorry, aber ich hab' dich für intelligent genug gehalten, die benötigten Header selber zu finden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<blockquote>
<p>Die Ausgabe ist allerdings unsauber, der spuckt mir das raus:</p>
<blockquote>
<p>Found MAC-Address: 0: c:29:90:72:9c:</p>
</blockquote>
<p>Fehlt da noch was?</p>
</blockquote>
<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285915</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 16 May 2007 08:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to printf Ausgabe auch als Variable bzw. Rückgabewert einer Funktion on Mon, 18 Jun 2007 12:26:35 GMT]]></title><description><![CDATA[<p>Danke so klappts:</p>
<pre><code class="language-cpp">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&lt;6;++i)
		home_tmp&lt;&lt;hex&lt;&lt;setfill('0')&lt;&lt;setw(2)&lt;&lt;(int)addr[i]&lt;&lt;':';
		return home_tmp.str().substr(0,17);
	}	
    else 
	{
    	return &quot;not found&quot;;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1285916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285916</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Mon, 18 Jun 2007 12:26:35 GMT</pubDate></item></channel></rss>