<?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[Funktion mit Parameter (char* S) mit std::string aufrufen]]></title><description><![CDATA[<p>Manche (WinAPI) Funktionen liefern Ergebnisse in einem char* Parameter zurück. Hin und wieder sehe ich folgenden Code dazu.</p>
<pre><code class="language-cpp">// Funktion liefert einen 10 Zeichen langen String in Value zurück.
size_t Get(char* Value)
{
}

int main(int argc, char** argv)
{
  std::string s;

  s.resize(11);
  Get(&amp;s[0]);

}
</code></pre>
<p>Kann man das ohne Problem so aufrufen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307572/funktion-mit-parameter-char-s-mit-std-string-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 18:02:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307572.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Aug 2012 10:35:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 10:37:09 GMT]]></title><description><![CDATA[<p>Manche (WinAPI) Funktionen liefern Ergebnisse in einem char* Parameter zurück. Hin und wieder sehe ich folgenden Code dazu.</p>
<pre><code class="language-cpp">// Funktion liefert einen 10 Zeichen langen String in Value zurück.
size_t Get(char* Value)
{
}

int main(int argc, char** argv)
{
  std::string s;

  s.resize(11);
  Get(&amp;s[0]);

}
</code></pre>
<p>Kann man das ohne Problem so aufrufen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246952</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Thu, 30 Aug 2012 10:37:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 11:07:41 GMT]]></title><description><![CDATA[<p>Bitte ein Bit schrieb:</p>
<blockquote>
<p>Kann man das ohne Problem so aufrufen ?</p>
</blockquote>
<p>Nein - es ist nicht garantiert, dass innerhalb von string die Zeichen in einem fortlaufenden Stück Speicher stehen. Zumal wird der String vorher und nachher 'offiziell' leer sein - man käme also gar nicht so einfach an die Zeichen ran.</p>
<p>Alternative kannst Du einen std::vector&lt; char &gt; benutzen. Nur statt reserve musst Du resize verwendet, oder besser den vector gleich mit der gewünschten Länge anlegen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246964</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 30 Aug 2012 11:07:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 11:14:11 GMT]]></title><description><![CDATA[<p>Ganz streng genommen (C++98): Nein. Aber das ist so, wie sich auf ASCII oder IEEE 754 zu verlassen: Streng genommen muss es nicht gelten, aber es wird auf allen normalen Systemen funktionieren.</p>
<p>Ganz streng genommen (C++11): Ja, das ist in Ordnung.</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Zumal wird der String vorher und nachher 'offiziell' leer sein - man käme also gar nicht so einfach an die Zeichen ran.</p>
</blockquote>
<p>Er hat resize benutzt, nicht reserve. Oder ist das eines der edits gewesen und es war vorher anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246968</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 30 Aug 2012 11:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 11:15:31 GMT]]></title><description><![CDATA[<p>Alternative (falls C++11 verfügbar):</p>
<pre><code class="language-cpp">// Funktion liefert einen 10 Zeichen langen String in Value zurück.
std::size_t Get(char* Value)
{
}

int main(int argc, char** argv)
{
  std::unique_ptr&lt; char[] &gt; s( new char[11] ); // erfordert #include &lt;memory&gt;
  Get( s.get() );
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246970</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 30 Aug 2012 11:15:31 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 12:06:16 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Bitte ein Bit schrieb:</p>
<blockquote>
<p>Kann man das ohne Problem so aufrufen ?</p>
</blockquote>
<p>Nein - es ist nicht garantiert, dass innerhalb von string die Zeichen in einem fortlaufenden Stück Speicher stehen. Zumal wird der String vorher und nachher 'offiziell' leer sein - man käme also gar nicht so einfach an die Zeichen ran.</p>
</blockquote>
<p>Doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246982</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 30 Aug 2012 12:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 12:35:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Oder ist das eines der edits gewesen und es war vorher anders?</p>
</blockquote>
<p>Nö, ich habe nichts am Quellcode geändert.</p>
<p>------</p>
<p>Ich denke ich werde es auf die altbekannte Art und Weise umschreiben, da ich jetzt nicht sicher bin ob man es machen kann oder nicht.</p>
<blockquote>
<p>Ganz streng genommen (C++11): Ja, das ist in Ordnung.</p>
</blockquote>
<p>Der Teufel steckt auch hier im Detail, da ja unterschiedliche Compiler C++11 unterschiedlich implementiert haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247004</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Thu, 30 Aug 2012 12:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Thu, 30 Aug 2012 12:46:56 GMT]]></title><description><![CDATA[<p>Bitte ein Bit schrieb:</p>
<blockquote>
<blockquote>
<p>Ganz streng genommen (C++11): Ja, das ist in Ordnung.</p>
</blockquote>
<p>Der Teufel steckt auch hier im Detail, da ja unterschiedliche Compiler C++11 unterschiedlich implementiert haben.</p>
</blockquote>
<p>Nein, das war auch in C++98 praktisch schon so, mit C++11 ist es nur offiziell geworden, weil man gemerkt hat, dass man den Standard auch so interpretieren <em>könnte</em>, dass es nicht gilt. Jede vernünftige Implementierung macht das so.</p>
<p>Das ist so wie die Klugscheißer, die festgestellt haben, dass ein vector laut altem Standard auch rückwärts im Speicher stehen könnte. Das hat zwar keine Implementierung gemacht, aber in C++11 hat man es trotzdem nochmal klargestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247007</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 30 Aug 2012 12:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 06:53:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Das ist so wie die Klugscheißer, die festgestellt haben, dass ein vector laut altem Standard auch rückwärts im Speicher stehen könnte. Das hat zwar keine Implementierung gemacht, aber in C++11 hat man es trotzdem nochmal klargestellt.</p>
</blockquote>
<p>Eine etwas harte Ausdrucksweise.</p>
<p>Für Leute wie mich, die relativ nach an der Grenze zur Verifikation entwickeln, sind solche Ungereimtheiten nicht anwendbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247226</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Fri, 31 Aug 2012 06:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 08:06:43 GMT]]></title><description><![CDATA[<p>Bitte ein Bit schrieb:</p>
<blockquote>
<blockquote>
<p>Das ist so wie die Klugscheißer, die festgestellt haben, dass ein vector laut altem Standard auch rückwärts im Speicher stehen könnte. Das hat zwar keine Implementierung gemacht, aber in C++11 hat man es trotzdem nochmal klargestellt.</p>
</blockquote>
<p>Eine etwas harte Ausdrucksweise.</p>
<p>Für Leute wie mich, die relativ nach an der Grenze zur Verifikation entwickeln, sind solche Ungereimtheiten nicht anwendbar.</p>
</blockquote>
<p>Du benutzt wirklich nie, dass Vectorspeicher vorwärts angeordnet ist? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Mein Respekt vor so viel Disziplin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247242</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 08:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 10:23:33 GMT]]></title><description><![CDATA[<blockquote>
<p>Du benutzt wirklich nie, dass Vectorspeicher vorwärts angeordnet ist? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Mein Respekt vor so viel Disziplin.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wo steht das, das ein std::string ein Vectorspeicher ist ???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247300</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 10:43:42 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wo steht das, das ein std::string linear angeordnet ?</p>
<p>Das ist doch mein Problem, das ich in der Doku nicht gefunden habe das std::string linear angeordnet sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247306</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 10:42:57 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Das ist so wie die Klugscheißer, die festgestellt haben, dass ein vector laut altem Standard auch rückwärts im Speicher stehen könnte.</p>
</blockquote>
<p>Bitte was? Das würde sich aber mit 23.4.2 &quot;Class template vector&quot; Paragraph 1 beißen:</p>
<blockquote>
<p>[...] The elements of a vector are stored contiguously, meaning that if v is a vector&lt;T, Allocator&gt; where T is some type other than bool, then it obeys the identity &amp;v[n] == &amp;v[0] + n for all 0 &lt;= n &lt; v.size()</p>
</blockquote>
<p>(C++03)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247307</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:42:57 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 10:52:28 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>(C++03)</p>
</blockquote>
<p>Sag bloß, du wusstest nicht, dass es diesen Satz in C++98 noch nicht gab?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247310</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:52:28 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 10:52:56 GMT]]></title><description><![CDATA[<p>Bitte ein Bit schrieb:</p>
<blockquote>
<p>Wo steht das, das ein std::string linear angeordnet?</p>
</blockquote>
<p>Im C++11 Standard steht das (21.4.1/5) hier:</p>
<blockquote>
<p>The char-like objects in a basic_string object shall be stored contiguously. That is, for any basic_string object s, the identity &amp;*(s.begin() + n) == &amp;*s.begin() + n shall hold for all values of n such that 0 &lt;= n &lt; s.size().</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2247311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247311</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion mit Parameter (char* S) mit std::string aufrufen on Fri, 31 Aug 2012 10:56:08 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>(C++03)</p>
</blockquote>
<p>Sag bloß, du wusstest nicht, dass es diesen Satz in C++98 noch nicht gab?</p>
</blockquote>
<p>Ist mir tatsächlich neu, dass das, was ich aus C++03 zitierte, nicht in C++98 stehen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247313</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:56:08 GMT</pubDate></item></channel></rss>