<?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[char-array einer variablen zuweisen]]></title><description><![CDATA[<p>Hi Leute<br />
Ich komme aus der C#-Ecke und muss zugeben, dass ich das Prinzip von char-Arrays und Pointern noch nicht ganz verstanden habe. Da Google und die Board-Suche mir noch nicht weitergeholfen hat, versuch ich mal, mein Problem direkt zu posten:</p>
<p>Ich habe eine Klasse geschrieben, die mir alle wichtigen Systeminformationen ausgibt. Dafür werden im Konstruktor die Standardfunktionen wie uname oder getpwent ausgeführt und die Ergebnisse in öffentlichen Variablen gespeichert, über die ich dann in der Instanz der Klasse zugreifen kann.<br />
Die uname-Funktion z.b. gibt das Ergebnis allerdings als char-Array zurück.<br />
Nun kriege ich es partout nicht hin, eine Variable zu deklarieren, die den Rückgabewert der Funktion aufnehmen kann. Folgendes habe ich schon versucht:</p>
<p>char* hostname;</p>
<p>System::System()<br />
{<br />
utsname u;<br />
uname(&amp;u);<br />
hostname=u.sysname;<br />
}<br />
Da kam nur Binärsalat heraus.</p>
<p>char hostname[65];</p>
<p>System::System()<br />
{<br />
utsname u;<br />
uname(&amp;u);<br />
hostname=u.sysname;<br />
}<br />
Da sagte mir der Compiler: invalid array assignment</p>
<p>char *hostname;</p>
<p>System::System()<br />
{<br />
utsname u;<br />
uname(&amp;u);<br />
hostname=&amp;u.sysname;<br />
}<br />
Auch das fand ich gar nicht so unlogisch. Gcc belehrte mich aber eines besseren:<br />
cannot convert ‘char (<em>)[65]’ to ‘char</em>’ in assignment</p>
<p>Ich hoffe doch, dass in diesem Board nicht nur solche .NET-Weichlinge wie ich rumlaufen, und jemand eine Lösung hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196236/char-array-einer-variablen-zuweisen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 07:09:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196236.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Oct 2007 09:23:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:23:38 GMT]]></title><description><![CDATA[<p>Hi Leute<br />
Ich komme aus der C#-Ecke und muss zugeben, dass ich das Prinzip von char-Arrays und Pointern noch nicht ganz verstanden habe. Da Google und die Board-Suche mir noch nicht weitergeholfen hat, versuch ich mal, mein Problem direkt zu posten:</p>
<p>Ich habe eine Klasse geschrieben, die mir alle wichtigen Systeminformationen ausgibt. Dafür werden im Konstruktor die Standardfunktionen wie uname oder getpwent ausgeführt und die Ergebnisse in öffentlichen Variablen gespeichert, über die ich dann in der Instanz der Klasse zugreifen kann.<br />
Die uname-Funktion z.b. gibt das Ergebnis allerdings als char-Array zurück.<br />
Nun kriege ich es partout nicht hin, eine Variable zu deklarieren, die den Rückgabewert der Funktion aufnehmen kann. Folgendes habe ich schon versucht:</p>
<p>char* hostname;</p>
<p>System::System()<br />
{<br />
utsname u;<br />
uname(&amp;u);<br />
hostname=u.sysname;<br />
}<br />
Da kam nur Binärsalat heraus.</p>
<p>char hostname[65];</p>
<p>System::System()<br />
{<br />
utsname u;<br />
uname(&amp;u);<br />
hostname=u.sysname;<br />
}<br />
Da sagte mir der Compiler: invalid array assignment</p>
<p>char *hostname;</p>
<p>System::System()<br />
{<br />
utsname u;<br />
uname(&amp;u);<br />
hostname=&amp;u.sysname;<br />
}<br />
Auch das fand ich gar nicht so unlogisch. Gcc belehrte mich aber eines besseren:<br />
cannot convert ‘char (<em>)[65]’ to ‘char</em>’ in assignment</p>
<p>Ich hoffe doch, dass in diesem Board nicht nur solche .NET-Weichlinge wie ich rumlaufen, und jemand eine Lösung hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392880</guid><dc:creator><![CDATA[sam.fisher]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:31:07 GMT]]></title><description><![CDATA[<p>In C# würdest du doch auch die String-Klasse benutzen, also nimm in C++ std::string (#include &lt;string&gt;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392885</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:58:21 GMT]]></title><description><![CDATA[<p>Ehm was ist denn utsname für die Klasse/Struct/Datentyp und was ist uname für eine Funktion? Kommt darauf an was die dir zurück gibt ... Sicherheitshalber immer kopieren:</p>
<pre><code class="language-cpp">#if !defined(SYSTEM_H__INCLUDED) // Include-Guard #01
#define SYSTEM_H__INCLUDED

#if (_MSC_VER &gt;= 1300) // Include-Guard #02
#pragma once
#endif // (_MSC_VER &gt;= 1300)

class System
{
    char* m_hostname; // private!

public:
    System(); // { c-tor }
    System(System const&amp;); // { copy-c-tor }
    System&amp; operator=(System const&amp;); // Zuweisungsoperator
    virtual ~System(); // { d-tor }
};

#endif // SYSTEM_H__INCLUDED // End of Include-Guard #01
</code></pre>
<pre><code class="language-cpp">#include &lt;cstring&gt;
#include &quot;System.h&quot;

System::System()
{
    utsname u;
    uname(&amp;u); 
    m_hostname = new char[std::strlen(u.sysname) + 1];
    std::strcpy(m_hostname, u.sysname);
}

System::System(System const&amp; rhs)
{
    m_hostname = new char[std::strlen(rhs.m_hostname) + 1];
    std::strcpy(m_hostname, rhs.m_hostname);
}

System&amp; System::operator=(System const&amp; rhs)
{
    delete [] m_hostname;
    m_hostname = new char[std::strlen(rhs.m_hostname) + 1];
    std::strcpy(m_hostname, rhs.m_hostname);
}

System::~System()
{
    delete [] m_hostname;
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392894</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:48:48 GMT]]></title><description><![CDATA[<p>Na (D)Evil, seit wann gibst du dich denn mit C-Strings ab? <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>
<p>Und man sollte vielleicht den Kopierkonstruktor überschreiben, sonst wird der char*-Zeiger ja einfach übernommen, delete[] dürfte dann in die Hose gehen, das gleiche mit dem Zuweisungs-Operator..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392896</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:48:48 GMT</pubDate></item><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:50:53 GMT]]></title><description><![CDATA[<blockquote>
<p>Na (D)Evil, seit wann gibst du dich denn mit C-Strings ab? <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>Ich schon immer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> Das war (mir ist der Nick-Name entfallen) so nen anderer <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<blockquote>
<p>Und man sollte vielleicht den Kopierkonstruktor überschreiben, sonst wird der char*-Zeiger ja einfach übernommen, delete[] dürfte dann in die Hose gehen, das gleiche mit dem Zuweisungs-Operator ...</p>
</blockquote>
<p>Werde es kurz reinpacken ... wait <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392899</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:52:55 GMT]]></title><description><![CDATA[<p>Ja, das hatte ich schon versucht, aber aus Deinem Beitrag habe ich auch schon meinen Fehler gesehen.<br />
Meine Headerdatei sah folgendermaßen aus:<br />
#ifndef SYSTEM_H_<br />
#define SYSTEM_H_</p>
<p>#include &lt;string&gt;</p>
<p>class System<br />
{<br />
public:<br />
System();<br />
virtual ~System();<br />
int uid;<br />
int guid;<br />
void getlocaluser();<br />
string hostname;<br />
};</p>
<p>#endif /*SYSTEM_H_*/</p>
<p>Da sagte mir der Compiler, String does not name a Type.</p>
<p>Ich hatte vergessen, den STD-Namespace einzubinden.<br />
Jetzt gehts, danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392901</guid><dc:creator><![CDATA[sam.fisher]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:52:55 GMT</pubDate></item><item><title><![CDATA[Reply to char-array einer variablen zuweisen on Sat, 27 Oct 2007 09:58:07 GMT]]></title><description><![CDATA[<p>Ehm auch da:</p>
<pre><code class="language-cpp">#if !defined(SYSTEM_H__INCLUDED)
#define SYSTEM_H__INCLUDED

#if (_MSC_VER &gt;= 1300)
#pragma once
#endif // (_MSC_VER &gt;= 1300)

#include &lt;string&gt;

class System
{
public:
    System();
    virtual ~System();

public:
    void getlocaluser();

private:
    int m_uid;
    int m_guid;
    std::string m_hostname;
};

#endif // SYSTEM_H__INCLUDED
</code></pre>
<p>... nen bissel Ordnung usw ;P</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392905</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 27 Oct 2007 09:58:07 GMT</pubDate></item></channel></rss>