<?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[Liste aus char* einen Vector aus strings zuweisen]]></title><description><![CDATA[<p>Huhu,</p>
<p>bin gerade bei einer Übungsausfgabe angekommen, bei der ich nicht weiter weiss.<br />
Also einer Liste von char* sollen einem Vector, bestehend aus Strings im &quot;C-Stil&quot;, zugewiesen werden.<br />
Mein Ansatz war:</p>
<pre><code class="language-cpp">list&lt;char *&gt; clst(3, '\0');
	vector&lt;string&gt; svec;
	svec.push_back(&quot;Aaaa&quot;); svec.push_back(&quot;Bbbb&quot;);svec.push_back(&quot;Cccc&quot;);

	list&lt;char*&gt;::iterator lstit(clst.begin());
	for(vector&lt;string&gt;::iterator vecit(svec.begin()); vecit != svec.end(); ++vecit)
	{	
		if(lstit != clst.end())
		{
			*lstit = vecit-&gt;c_str();
			++lstit;
		}
	}
</code></pre>
<p>So gibt es allerdings ein Umwandlungsproblem von char* -&gt; char const <em>.<br />
(Line 10).<br />
Jetzt soll die Liste aber aus char</em> und nicht char const* bestehen, welche anderen Möglichkeiten zur Umwandlung wären hier angebracht.<br />
Und ist mit Zeichenstrings im C-Stil, aus dem der Vektor bestehen soll, sowas gemeint:<br />
<div class="plugin-markdown"><input type="checkbox" id="checkbox5829" /><label for="checkbox5829">= {&quot;Hallo&quot;};</label></div><br />
Wenn ja, wie bau ich einen Vektor im C-Stil? vector&lt;char[]&gt; wird er ja kaum erlauben.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219719/liste-aus-char-einen-vector-aus-strings-zuweisen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 19:03:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219719.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Aug 2008 17:56:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 17:56:11 GMT]]></title><description><![CDATA[<p>Huhu,</p>
<p>bin gerade bei einer Übungsausfgabe angekommen, bei der ich nicht weiter weiss.<br />
Also einer Liste von char* sollen einem Vector, bestehend aus Strings im &quot;C-Stil&quot;, zugewiesen werden.<br />
Mein Ansatz war:</p>
<pre><code class="language-cpp">list&lt;char *&gt; clst(3, '\0');
	vector&lt;string&gt; svec;
	svec.push_back(&quot;Aaaa&quot;); svec.push_back(&quot;Bbbb&quot;);svec.push_back(&quot;Cccc&quot;);

	list&lt;char*&gt;::iterator lstit(clst.begin());
	for(vector&lt;string&gt;::iterator vecit(svec.begin()); vecit != svec.end(); ++vecit)
	{	
		if(lstit != clst.end())
		{
			*lstit = vecit-&gt;c_str();
			++lstit;
		}
	}
</code></pre>
<p>So gibt es allerdings ein Umwandlungsproblem von char* -&gt; char const <em>.<br />
(Line 10).<br />
Jetzt soll die Liste aber aus char</em> und nicht char const* bestehen, welche anderen Möglichkeiten zur Umwandlung wären hier angebracht.<br />
Und ist mit Zeichenstrings im C-Stil, aus dem der Vektor bestehen soll, sowas gemeint:<br />
<div class="plugin-markdown"><input type="checkbox" id="checkbox5829" /><label for="checkbox5829">= {&quot;Hallo&quot;};</label></div><br />
Wenn ja, wie bau ich einen Vektor im C-Stil? vector&lt;char[]&gt; wird er ja kaum erlauben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560388</guid><dc:creator><![CDATA[Micha_in_Mission]]></dc:creator><pubDate>Wed, 06 Aug 2008 17:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 18:44:44 GMT]]></title><description><![CDATA[<p>ich bin zwar selber anfänger aber ich probiers mal</p>
<p>list&lt;char*&gt;bla ist nur eine liste mit pointer zur char-arrays aber keine char-array selber</p>
<p>willst du einen string aus einem vector in die liste haben musst du einen char-array erstellen, dafür must du speicher mit new reservieren und den pointer vom char-array den du erstellt hast kannst du dann die liste hauen. aber dann muss du am ende der anwendung die liste sicherheitshalber durchgehen und alle pointer mit delete &quot;löschen&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560417</guid><dc:creator><![CDATA[rg34gh34ghfe]]></dc:creator><pubDate>Wed, 06 Aug 2008 18:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 19:41:08 GMT]]></title><description><![CDATA[<p>Wenn ich es richtig verstehe:</p>
<pre><code class="language-cpp">std::list&lt;char*&gt; lst;
// fill lst
std::vector&lt;char*&gt; vec;
vec.resize(lst.size());
std::copy(lst.begin(), lst.end(), vec.begin());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1560446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560446</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Wed, 06 Aug 2008 19:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 20:35:06 GMT]]></title><description><![CDATA[<p>Ich denk mal es war genau andersrum gemeint Airdamm.</p>
<p>Von vec nach Liste ginge es in etwa so:</p>
<pre><code class="language-cpp">std::list&lt;char*&gt; lst;
std::vector&lt;std::string&gt; vec;
//vector fuellen

for (std::vector&lt;std::string&gt;::iterator it = vec.begin(); it != vec.end; ++it)
{
  std::size_t clength = it-&gt;length() + 1; //der c-string hat noch das abschliessende '\0'
  char* str = new char[clength]; //neues char-array
  const char* pc = it-&gt;c_str();
  std::copy(pc, pc+(clength), str); //oder auch std::strcopy
  lst.push_back(str);
}

//have fun with the list!

while (! lst.empty())
{
  delete[] lst.front();
  lst.pop_front();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1560472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560472</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Aug 2008 20:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 20:39:49 GMT]]></title><description><![CDATA[<p>@Airdamm:<br />
Egal ob deine Lösung nun zum OP passt oder nicht - ich bin gerade am überlegen ob sich das list.size() lohnt, da hat ja immerhin auch lineare Komplexität. Mir gefallen irgendwie beide Varianten nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ich glaub ich würde das einfach dem Range-Konstruktor von vector überlassen und auf eine intelligente Implementierung hoffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560474</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 06 Aug 2008 20:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 20:48:39 GMT]]></title><description><![CDATA[<p>die implementierung des range-ctors wird sicherlich kein size erfragen, da selbst difference() für die iteratoren nicht definiert sein muss. Selbst Airdamms variante wäre mit einem back_inserter(vec.end()) um den size() Aufruf herumgekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560479</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Aug 2008 20:48:39 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 20:53:18 GMT]]></title><description><![CDATA[<p>Naja mit dem back_inserter hast du dann halt wieder die wiederkehrenden Vergrößerungen. <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="😉"
    /> Es sei denn, du benutzt v.resize( l.size()). Okay, diese Variante erspart sich das Rumkopieren. Aber bei meinetwegen 1000 Elementen spielt das eh keine Rolle. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> War mal nur laut gedacht am Abend. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560483</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 06 Aug 2008 20:53:18 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 21:16:07 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Naja mit dem back_inserter hast du dann halt wieder die wiederkehrenden Vergrößerungen. <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="😉"
    /> Es sei denn, du benutzt v.resize( l.size())</p>
</blockquote>
<p>Ich hoff du meinst reserve() <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="😉"
    /> denn mti resize() UND back_inserter hast du dann N default-konstruierte Elemente und danach nochmal N kopierte <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1560491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560491</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 06 Aug 2008 21:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 22:00:45 GMT]]></title><description><![CDATA[<p>Danke für die Antworten.<br />
Besonders dir pumuckl, so hatte ich die Aufgabe auch verstanden!<br />
Ohne Speicher allokieren zu müssen gehts auf keinen Fall, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560502</guid><dc:creator><![CDATA[Micha_in_Mission]]></dc:creator><pubDate>Wed, 06 Aug 2008 22:00:45 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Wed, 06 Aug 2008 22:11:25 GMT]]></title><description><![CDATA[<p>Nachtrag:<br />
Also in diesem Falle auch nur als Pointer auf das erste Zeichen vom jeweiligen Vector-String, der ja auf dem Stack liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560505</guid><dc:creator><![CDATA[Micha_in_Mission]]></dc:creator><pubDate>Wed, 06 Aug 2008 22:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Thu, 07 Aug 2008 05:46:02 GMT]]></title><description><![CDATA[<p>ohne dynamisches allokieren gehts nicht, nein.<br />
beim std::string macht die klasse das für dich, was bei einem std::string auf dem stack liegt sind nur die rahmendaten, hauptsächlich ein Pointer, evtl ein size_t der die Länge speichert usw.<br />
In diesem Fall liegt aber nichtmal das auf dem Stack, da der vector seine gespeicherten Daten auch dynamisch verwaltet (wie so ziemlich alle Container, also auch die list).</p>
<p>std::string::c_str() liefert dir einen const char* auf das erste Zeiche vom String. Allerdings kannst du den nicht einfach in die Liste stecken, da dir erstens das const in die Quere kommt (const ist es weil du über den Pointer nicht in den String-Eingeweiden Rumwerkeln sollst) und zweitens dem string ausdrücklich erlaubt ist, seinen Inhalt zu einem späteren Zeitpunkt an einen anderen Ort zu kopieren und den Speicher wieder freizugeben. In so einem Fall würden die pointer in der List dann irgendwo in den Speicher zeigen, wo schon längst kein String mehr anzutreffen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560539</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 07 Aug 2008 05:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Thu, 07 Aug 2008 06:41:50 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Ich hoff du meinst reserve() <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="😉"
    /> denn mti resize() UND back_inserter hast du dann N default-konstruierte Elemente und danach nochmal N kopierte <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>Man achte bitte auf die Uhrzeit *reusper* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560557</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Thu, 07 Aug 2008 06:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Thu, 07 Aug 2008 10:11:27 GMT]]></title><description><![CDATA[<p>Super, danke für die ausführliche Erklärung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560715</guid><dc:creator><![CDATA[Micha_in_Mission]]></dc:creator><pubDate>Thu, 07 Aug 2008 10:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Thu, 07 Aug 2008 13:03:11 GMT]]></title><description><![CDATA[<p>vielleicht gehts auch ohne allokieren, da die zeiger solange gültig sind solange man die strings nicht anfasst.<br />
wenn du also den vector nicht benutzt kannst du die zeiger in der liste speiciehrn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1560858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560858</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 07 Aug 2008 13:03:11 GMT</pubDate></item><item><title><![CDATA[Reply to Liste aus char* einen Vector aus strings zuweisen on Thu, 07 Aug 2008 13:16:40 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>vielleicht gehts auch ohne allokieren, da die zeiger solange gültig sind solange man die strings nicht anfasst.<br />
wenn du also den vector nicht benutzt kannst du die zeiger in der liste speiciehrn</p>
</blockquote>
<p>Die Restritkionen wären aber immens. Viele Zugriffe auf den vector können dafür sorgen, dass der neuen Speicher allozieren muss, dadurch die Strings umkopiert, wodurch wiederum die Zeiger in der Liste ungültig werden (können). Wenn man den vector umkopiert kommts natürlich genauso. Da vermutlich irgendjemand anderes den Code später modifiziert muss dem mit großen roten Warntafeln und Starkstromzäunen klargemacht werden, dass er auf keinen Fall den vector berühren soll... Dann doch lieber dynamisch Speicher anfordern oder noch besser garnicht erst mit blanken char-pointern hantieren. Gut dass das nur als Übung gedacht war <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1560867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1560867</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 07 Aug 2008 13:16:40 GMT</pubDate></item></channel></rss>