<?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[Escape Sequenzen aus InputStream filtern]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ein Programm soll Texte auf ein LCD-Display ausgeben.</p>
<p>Mein Problem: Das Display wird mit der Escape Sequenz \a gelöscht. Wenn die Escape Sequenz in einem String steckt &quot;bla bla \a bbla bla&quot; wird sie vom Display Treiber ignoriert, da die Escape Sequenz ja nicht in ein einzelnes char umgewandelt sondern als Zeichen '\' und 'a' dem Treiber übergeben wird.<br />
Wie kann ich den File-Out Stream auf die Escape Zeichen filtern und diese als einzelne Zeichen dem Treiber überreichen?</p>
<p>Die Funktion sieht so aus:</p>
<pre><code class="language-cpp">int lcdPrintf(const char* msg) {
	filestr &lt;&lt; msg;

	if (filestr.fail()) {
		cerr &lt;&lt; &quot; Could not write to LCD&quot; &lt;&lt; endl;
		return -1;
	}

	return 0;
}
</code></pre>
<p>Ich hab's mit outstringstream versucht. Nur kennt dieser die Methode ignore() nicht. Ich muss den String entgegennehmen, bearbeiten und dann an den File-Stream senden.</p>
<p>Wer kann mir da weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247193/escape-sequenzen-aus-inputstream-filtern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 13:52:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247193.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Aug 2009 12:54:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Escape Sequenzen aus InputStream filtern on Fri, 07 Aug 2009 12:54:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ein Programm soll Texte auf ein LCD-Display ausgeben.</p>
<p>Mein Problem: Das Display wird mit der Escape Sequenz \a gelöscht. Wenn die Escape Sequenz in einem String steckt &quot;bla bla \a bbla bla&quot; wird sie vom Display Treiber ignoriert, da die Escape Sequenz ja nicht in ein einzelnes char umgewandelt sondern als Zeichen '\' und 'a' dem Treiber übergeben wird.<br />
Wie kann ich den File-Out Stream auf die Escape Zeichen filtern und diese als einzelne Zeichen dem Treiber überreichen?</p>
<p>Die Funktion sieht so aus:</p>
<pre><code class="language-cpp">int lcdPrintf(const char* msg) {
	filestr &lt;&lt; msg;

	if (filestr.fail()) {
		cerr &lt;&lt; &quot; Could not write to LCD&quot; &lt;&lt; endl;
		return -1;
	}

	return 0;
}
</code></pre>
<p>Ich hab's mit outstringstream versucht. Nur kennt dieser die Methode ignore() nicht. Ich muss den String entgegennehmen, bearbeiten und dann an den File-Stream senden.</p>
<p>Wer kann mir da weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756933</guid><dc:creator><![CDATA[maus_on_c]]></dc:creator><pubDate>Fri, 07 Aug 2009 12:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Escape Sequenzen aus InputStream filtern on Fri, 07 Aug 2009 13:08:41 GMT]]></title><description><![CDATA[<p>maus_on_c schrieb:</p>
<blockquote>
<p>Ich muss den String entgegennehmen, bearbeiten und dann an den File-Stream senden.</p>
</blockquote>
<p>Das isses doch schon. std::string hat ne Menge Methoden zum verwursteln, z.B. zum finden und ausschnibbeln von substrings etc.</p>
<p><a href="http://www.cplusplus.com/reference/string/string/" rel="nofollow">http://www.cplusplus.com/reference/string/string/</a></p>
<p>beachte z.B. die find-Methoden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756946</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 07 Aug 2009 13:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to Escape Sequenzen aus InputStream filtern on Fri, 07 Aug 2009 13:31:15 GMT]]></title><description><![CDATA[<p>so in etwas würd es mir gefallen.</p>
<pre><code class="language-cpp">char* s = &quot;Hello\nworld&quot;;
	string converted;

	while(*s)
	{
		if ( *s == '\\' )
		{	
			s++;
			switch (*s)
			{
				case 'a':
					converted += 7;
			    break;

				case 'n':
					converted += 10;
			    break;

				// more stuff
			}
		}
		else
		{
			converted += *s;
		}

		s++;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1756963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756963</guid><dc:creator><![CDATA[convert0r]]></dc:creator><pubDate>Fri, 07 Aug 2009 13:31:15 GMT</pubDate></item><item><title><![CDATA[Reply to Escape Sequenzen aus InputStream filtern on Tue, 11 Aug 2009 09:13:34 GMT]]></title><description><![CDATA[<p>Danke ConvertOr. So gefällts auch mir sehr <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="😃"
    /> !!</p>
<p>Die Methode hat beinahe ihren End-Zustand erreicht. Sie sieht mittlerweile so aus:</p>
<pre><code class="language-cpp">int lcdPrintf(const char format[], ...) {

	// Get variable arguments
	char* s = (char*) malloc(80 * sizeof(char));
	va_list arg;
	int done;
	va_start(arg, format);
	// compile String
	done = vsprintf(s, format, arg);

	// Set Terminator
	s[done] = 0;

	while (*s) {
		if (*s == '\\') {
			s++;
			switch (*s) {
			case 'a':
				filestr.put('\a');
				break;
			case 'n':
				filestr.put('\n');
				break;
			case 'r':
				filestr.put('\r');
				break;
			}
		} else {
			filestr &lt;&lt; *s;
		}
		s++;
	}
	filestr.flush();
	if (filestr.fail()) {
		cerr &lt;&lt; &quot; Could not write to the LCD&quot; &lt;&lt; endl;
//		free(s); // hier gibt's ein Segfault
		return -1;
	}
	//free(s); // hier gibt's ein Segfault
	return 0;
}
</code></pre>
<p>Die Methode kann nun à la printf einen Format-Vektor wiedergeben. filestr.flush() muss sein, um den filestream ohne newline zur Ausgabe zu zwingen.</p>
<p>Was mich jetzt noch beschäftigt: Ich habe gelernt, dass man alle Variablen, welche man mit malloc() alloziert hat, gefälligst mit free() wieder de-allozieren soll. Warum geben die free()-Aufrufe in der Methode oben einen Segmentation fault?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758687</guid><dc:creator><![CDATA[maus_on_c]]></dc:creator><pubDate>Tue, 11 Aug 2009 09:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to Escape Sequenzen aus InputStream filtern on Tue, 11 Aug 2009 09:30:05 GMT]]></title><description><![CDATA[<p>maus_on_c schrieb:</p>
<blockquote>
<p>Was mich jetzt noch beschäftigt: Ich habe gelernt, dass man alle Variablen, welche man mit malloc() alloziert hat, gefälligst mit free() wieder de-allozieren soll. Warum geben die free()-Aufrufe in der Methode oben einen Segmentation fault?</p>
</blockquote>
<p>Wegen &quot;s++&quot;. Du übergibst an free() überhaupt nicht mehr die Adresse, die dir malloc() geliefert hat. Armes malloc() <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>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758695</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Tue, 11 Aug 2009 09:30:05 GMT</pubDate></item><item><title><![CDATA[Reply to Escape Sequenzen aus InputStream filtern on Tue, 11 Aug 2009 09:40:24 GMT]]></title><description><![CDATA[<p>ach ja. Vergesst meine letzte Frage. Da ich den Pointer mehrmals inkrementiert habe, kann ich mit dem Pointer als Parameter kein free() mehr aufrufen.</p>
<p>Lösung: Entweder eine Copy des Pointers zu Beginn der Methode erstellen oder eine separate Inkrementiervariable dem Pointer hinzufügen (*ptr + ++i) .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1758704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1758704</guid><dc:creator><![CDATA[maus_on_c]]></dc:creator><pubDate>Tue, 11 Aug 2009 09:40:24 GMT</pubDate></item></channel></rss>