<?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[std::string::rfind() und nullbyte]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich habe folgendes problem:</p>
<pre><code class="language-cpp">std::string bla;
//bla bekommt halt n wert..is nich so wichtig

string::size_type pos = std::string suche;//&quot;\0&quot;, &quot;\x0&quot; oder '\0'

bla.rfind(suche, std::string::npos);//geht nicht
bla.rfind('\0', std::string::npos);//geht
</code></pre>
<p>also das programm macht im prinzip nichts außer nach einem nullbyte in einem string rückwärts zu suchen und mir die position zu geben (ist jetzt natürlich n ausschnitt des programms ;)). Wenn der string &quot;suche&quot; den wert &quot;\0&quot; oder &quot;\x0&quot; hat findet er nichts. Nur wenn ich direkt in die funktion als erstes parameter '\0' eintrage findet er was. Wie kann ich dem string &quot;suche&quot; jetzt n nullbyte zuweisen und auch noch darauf hoffen dass rfind() auch was findet?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254446/std-string-rfind-und-nullbyte</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 01:02:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254446.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Nov 2009 17:58:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 17:58:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich habe folgendes problem:</p>
<pre><code class="language-cpp">std::string bla;
//bla bekommt halt n wert..is nich so wichtig

string::size_type pos = std::string suche;//&quot;\0&quot;, &quot;\x0&quot; oder '\0'

bla.rfind(suche, std::string::npos);//geht nicht
bla.rfind('\0', std::string::npos);//geht
</code></pre>
<p>also das programm macht im prinzip nichts außer nach einem nullbyte in einem string rückwärts zu suchen und mir die position zu geben (ist jetzt natürlich n ausschnitt des programms ;)). Wenn der string &quot;suche&quot; den wert &quot;\0&quot; oder &quot;\x0&quot; hat findet er nichts. Nur wenn ich direkt in die funktion als erstes parameter '\0' eintrage findet er was. Wie kann ich dem string &quot;suche&quot; jetzt n nullbyte zuweisen und auch noch darauf hoffen dass rfind() auch was findet?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808948</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Mon, 16 Nov 2009 17:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:11:21 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string bla = &quot;.....&quot;;

std::string::size_type found = bla.rfind('\0');
if(found != std::string::npos)
{
  //was gefunden
}
</code></pre>
<p>falls das in ner schleife machen willst, geht das auch nicht viel schwerer:</p>
<pre><code class="language-cpp">std::string bla = &quot;.....&quot;;

std::string::size_type found = bla.rfind('\0');
for(; found != std::string::npos; found = bla.rfind('\0', found))
{
  //mach was mit bla[found]
}
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">std::string::size_type found = std::string::npos;
while(std::string::npos != found = bla.rfind('\0', found))
{
  //mach was mit bla[found]
}
</code></pre>
<p>wenn du mehrere nullbytes hast, gibt es noch rfind_first_of oder so in der richtung<br />
allerdings liefert mindestens &quot;\0&quot; und '\0' die gleichen ergebnisse - &quot;\x0&quot; bzw. '\x0' sicherlich auch...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808954</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:11:21 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:17:07 GMT]]></title><description><![CDATA[<blockquote>
<p>allerdings liefert mindestens &quot;\0&quot; und '\0' die gleichen ergebnisse - &quot;\x0&quot; bzw. '\x0' sicherlich auch...</p>
</blockquote>
<p>ja dachte ich eigentlich auch... tuts aber irgendwie nich. Also nochma<br />
wenn suche = &quot;\0&quot; geht es nicht wenn suche = '\0' gibts n fehler. Wenn ich in die funktion &quot;\0&quot; eintrage geht es nicht. Wenn ich in die funktion '\0' eintrage geht es.<br />
Und so: bla.rfind('\0')<br />
will ich das ja grade nich machen.... da soll ja trotzdem bla.rfind(suche)<br />
stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808963</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:19:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;

int main()
{
  std::string bla = &quot;asdasd\0asd\0a&quot;;
  char suche = '\0';

  std::string::size_type found = bla.rfind(suche);
}
</code></pre>
<p>geht nicht? Oo<br />
poste mal nen compilierbares mini-bsp. von deinem versuch - ich versteh dein problem nicht so richtig -.-</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808964</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:19:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:22:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">unsigned int str_rmatch(const string &amp;search, string &amp;inputString, unsigned int startpos)
	{
		string::size_type pos = inputString.rfind(search, startpos);

		if(string::npos == pos){
			return -1;
		} else {
			return pos;
		}
	}

std::string bla = &quot;asdasd\0asd\0a&quot;;

str_rmatch(&quot;\0&quot;, bla, string::npos);
</code></pre>
<p>hier genau so wie ich es hab^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808966</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:25:39 GMT]]></title><description><![CDATA[<p>1700 schrieb:</p>
<blockquote>
<blockquote>
<p>allerdings liefert mindestens &quot;\0&quot; und '\0' die gleichen ergebnisse - &quot;\x0&quot; bzw. '\x0' sicherlich auch...</p>
</blockquote>
<p>ja dachte ich eigentlich auch... tuts aber irgendwie nich. Also nochma<br />
wenn suche = &quot;\0&quot; geht es nicht wenn suche = '\0' gibts n fehler. Wenn ich in die funktion &quot;\0&quot; eintrage geht es nicht. Wenn ich in die funktion '\0' eintrage geht es.<br />
Und so: bla.rfind('\0')<br />
will ich das ja grade nich machen.... da soll ja trotzdem bla.rfind(suche)<br />
stehen.</p>
</blockquote>
<p>Wenn du als Argument der Funktion einen C-String angibst, ist das terminierende Nullbyte nicht Teil des Werts, nach dem gesucht wird (was eigentlich nicht weiter überraschen sollte). Wenn dein C-String selbst ein Nullbyte enthält, wird der String nur bis zu diesem Nullbyte ausgewertet. Somit ist bla.rfind(&quot;\0&quot;) dasselbe wie bla.rfind(&quot;&quot;).</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808967</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:27:34 GMT]]></title><description><![CDATA[<p>Hab den Code nicht weiter angesehen und nicht ausprobiert, aber das Nullbyte dient doch zur Terminierung eines Strings. Kann man überhaupt davon ausgehen, dass das Nullbyte gefunden werden kann? Der String ist ja an dieser Stelle als zu Ende gekennzeichnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808969</guid><dc:creator><![CDATA[zuzuzuzuzuz]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 18:51:59 GMT]]></title><description><![CDATA[<p>strings können gut miz nullen drin umgehen. nur der kosntruktor string(char const* str) denkt sinnvollerwqeise , str sei nullterminiert.</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
  std::string bla = std::string(&quot;asdasd&quot;)+'\0'+&quot;asd&quot;+'\0'+&quot;a&quot;;
  char suche = '\0';

  std::string::size_type found = bla.rfind(suche);
  std::cout&lt;&lt;found&lt;&lt;'\n';
  return 0;
}
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
  std::string bla (&quot;asdasd\0asd\0a&quot;,sizeof(&quot;asdasd\0asd\0a&quot;)-1);
  char suche = '\0';

  std::string::size_type found = bla.rfind(suche);
  std::cout&lt;&lt;found&lt;&lt;'\n';
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1808980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808980</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 16 Nov 2009 18:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 19:03:16 GMT]]></title><description><![CDATA[<p>1700 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::string bla = &quot;asdasd\0asd\0a&quot;;
</code></pre>
</blockquote>
<p>...erzeugt ein <code>std::string</code> Objekt namens <code>bla</code> mit 6 Zeichen als Inhalt: asdasd</p>
<p>Dazu wird der Konstruktor string(const char*) benutzt. Innerhalb dieses Konstruktors werden die Zeichen gezählt, bis die erste Null gefunden wird. Es sind dann 6 Zeichen (ausschließlich \0).</p>
<p>Wenn Du mehr von dem Array im String drinhaben willst, kannst Du das so machen:</p>
<pre><code class="language-cpp">static const char test[] = &quot;asdasd\0asd\0a&quot;;
std::string bla1 (test,test+sizeof(test));   // mit Null-Terminierung
std::string bla2 (test,test+sizeof(test)-1); // ohne Null-Terminierung
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1808990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1808990</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 16 Nov 2009 19:03:16 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 20:12:34 GMT]]></title><description><![CDATA[<p>oh - nachdenken 4tw <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
danke <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/1809040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809040</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 16 Nov 2009 20:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 21:27:31 GMT]]></title><description><![CDATA[<p>ok ja... is ja alles richtig... mein string wird mit ifstream aus ner datei geladen aber is ja auch unwichtig^^<br />
was mir auf jeden fall immernoch keiner sagen konnte is wie ich mit der variable search ein nullbyte suchen kann und search als string definiert lassen kann. Das es mit char klappt is mir klar. Das muss doch aber auch irgendwie möglich sein das search ein std::string bleibt und rfind() dennoch ein nullbyte findet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809060</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Mon, 16 Nov 2009 21:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 21:56:39 GMT]]></title><description><![CDATA[<p>1700 schrieb:</p>
<blockquote>
<p>ok ja... is ja alles richtig... mein string wird mit ifstream aus ner datei geladen aber is ja auch unwichtig^^<br />
was mir auf jeden fall immernoch keiner sagen konnte is wie ich mit der variable search ein nullbyte suchen kann und search als string definiert lassen kann. Das es mit char klappt is mir klar. Das muss doch aber auch irgendwie möglich sein das search ein std::string bleibt und rfind() dennoch ein nullbyte findet.</p>
</blockquote>
<p>Doch, eigentlich wurde gesagt, daß std::string suche(&quot;d\0a&quot;,3); geht und warum std::string suche=&quot;d\0a&quot;; nicht geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809067</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 16 Nov 2009 21:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to std::string::rfind() und nullbyte on Mon, 16 Nov 2009 22:03:09 GMT]]></title><description><![CDATA[<p>alles klar war mein fehler sorry. Danke für die Hilfe jetzt klappt alles!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1809075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1809075</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Mon, 16 Nov 2009 22:03:09 GMT</pubDate></item></channel></rss>