<?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[Variable leeren]]></title><description><![CDATA[<p>Hi,<br />
Ich wollte mit Hilfe eines Programmes Texte in einer Datei ausgeben. Dabei habe ich das Problem, dass am Ende des von mir geschreibenen Textes immer (mehr oder weniger) zufällige Zeichen ausgegeben werden. Also bei meinem Programm...</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;

using namespace std;

#define MAX_LENGTH 50

int main( void )
{
   FILE *stream;
   char insert[MAX_LENGTH+1];
   int  numread, numwritten;

   // Open file in text mode:
   if( fopen_s( &amp;stream, &quot;logfile.txt&quot;, &quot;w+t&quot; ) == 0 )
   {
      cout&lt;&lt;&quot;Gebe etwas ein (max 50Zeichen)&quot;;
	  cin&gt;&gt;insert;
      numwritten = fwrite( insert, sizeof( char ), 50, stream );
      printf( &quot;Wrote %d items\n&quot;, numwritten );
      fclose( stream );

   }
   else
      cout&lt;&lt;&quot;Problem opening the file\n&quot;;

   if( fopen_s( &amp;stream, &quot;logfile.txt&quot;, &quot;r+t&quot; ) == 0 )
   {
      numread = fread( insert, sizeof( char ), 50, stream );
      printf( &quot;Number of items read = %d\n&quot;, numread );
      printf( &quot;Contents of buffer = %.50s\n&quot;, insert );
      fclose( stream );
   }
   else
      cout&lt;&lt;&quot;File could not be opened\n&quot;;
getch();
}
</code></pre>
<p>...steht in der Ausgabedatei:</p>
<pre><code>(mein Text)          ñ ¾çy     £
</code></pre>
<p>jetzt meine Frage: Kann ich die Variable &quot;leeren&quot;? Also damit dort dann nurnoch dass drin steht was ich reinschreibe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199618/variable-leeren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 29 Jun 2026 13:24:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199618.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Dec 2007 10:52:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable leeren on Wed, 05 Dec 2007 11:04:48 GMT]]></title><description><![CDATA[<p>Hi,<br />
Ich wollte mit Hilfe eines Programmes Texte in einer Datei ausgeben. Dabei habe ich das Problem, dass am Ende des von mir geschreibenen Textes immer (mehr oder weniger) zufällige Zeichen ausgegeben werden. Also bei meinem Programm...</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;

using namespace std;

#define MAX_LENGTH 50

int main( void )
{
   FILE *stream;
   char insert[MAX_LENGTH+1];
   int  numread, numwritten;

   // Open file in text mode:
   if( fopen_s( &amp;stream, &quot;logfile.txt&quot;, &quot;w+t&quot; ) == 0 )
   {
      cout&lt;&lt;&quot;Gebe etwas ein (max 50Zeichen)&quot;;
	  cin&gt;&gt;insert;
      numwritten = fwrite( insert, sizeof( char ), 50, stream );
      printf( &quot;Wrote %d items\n&quot;, numwritten );
      fclose( stream );

   }
   else
      cout&lt;&lt;&quot;Problem opening the file\n&quot;;

   if( fopen_s( &amp;stream, &quot;logfile.txt&quot;, &quot;r+t&quot; ) == 0 )
   {
      numread = fread( insert, sizeof( char ), 50, stream );
      printf( &quot;Number of items read = %d\n&quot;, numread );
      printf( &quot;Contents of buffer = %.50s\n&quot;, insert );
      fclose( stream );
   }
   else
      cout&lt;&lt;&quot;File could not be opened\n&quot;;
getch();
}
</code></pre>
<p>...steht in der Ausgabedatei:</p>
<pre><code>(mein Text)          ñ ¾çy     £
</code></pre>
<p>jetzt meine Frage: Kann ich die Variable &quot;leeren&quot;? Also damit dort dann nurnoch dass drin steht was ich reinschreibe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415194</guid><dc:creator><![CDATA[Wolfi-kun]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to Variable leeren on Wed, 05 Dec 2007 10:59:52 GMT]]></title><description><![CDATA[<p>Wozu leeren? Du mußt einfach nur sicherstellen, daß deine Daten Nullterminiert sind, wenn du sie als String verwenden willst (sonst rennt printf() so lange weiter, bis es zufällig auf ein 0x00 stößt):</p>
<pre><code class="language-cpp">numread = fread( insert, sizeof( char ), 50, stream );
insert[numread]='\0';
</code></pre>
<p>Umgekehrt schreibst du 50 Byte in die Datei - da wird bei einer kürzeren Eingabe eben das genommen, was zufällig im Speicher stand. Um nur deine Nutzdaten zu speichern, mußt du die korrekte Länge beim fwrite()-Aufruf angeben (die bekommst du mit strlen()) - und am besten auch mit in die Datei schreiben.</p>
<p>PS: Wozu hast du überhaupt das &quot;#define MAX_LENGTH 50&quot;, wenn du die 50 dann trotzdem direkt verwendest <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/1415200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415200</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 10:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to Variable leeren on Wed, 05 Dec 2007 11:23:51 GMT]]></title><description><![CDATA[<p>erstmal danke für die schnelle Antwort^^</p>
<p>nullterminierenhört sich gut an<br />
aber ich kann mit strlen() nix anfangen ^^&quot;<br />
und die Hilfedatei von meinem compiler is alles andere als hilfreich...<br />
könntest du mir dafür evtl. ein Beispiel geben, bitte?</p>
<p>zu dem MAX_LENGTH 50 ...öhm ja... ich war da wohl ein wenig mit den Gedanken wo anders als ich das da eingebaut habe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415209</guid><dc:creator><![CDATA[Wolfi-kun]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:23:51 GMT</pubDate></item><item><title><![CDATA[Reply to Variable leeren on Wed, 05 Dec 2007 11:35:38 GMT]]></title><description><![CDATA[<p>Wolfi-kun schrieb:</p>
<blockquote>
<p>nullterminierenhört sich gut an<br />
aber ich kann mit strlen() nix anfangen ^^&quot;<br />
und die Hilfedatei von meinem compiler is alles andere als hilfreich...<br />
könntest du mir dafür evtl. ein Beispiel geben, bitte?</p>
</blockquote>
<p><a href="http://man.cx/strlen()" rel="nofollow">man: strlen()</a> liefert dir die Länge eines nullterminierten Strings (und die meisten String-Funktionen in C und C++ sorgen dafür, daß char-Arrays nullterminiert werden (bzw. erwarten, daß sie es sind).</p>
<p>Und die Frage, wie man am günstigsten einen String speichert, wird im C++ Board unter &quot;string speichern&quot; diskutiert.</p>
<blockquote>
<p>zu dem MAX_LENGTH 50 ...öhm ja... ich war da wohl ein wenig mit den Gedanken wo anders als ich das da eingebaut habe...</p>
</blockquote>
<p>Das einzubauen war schon eine brauchbare Idee - nur solltest du es auch nutzen (das ist der Vorteil von benannten Konstanten gegenüber &quot;Magic Numbers&quot; - wenn du der Meinung bist, 50 reicht nicht aus, mußt du die Arraygröße nur an einer Stelle berichtigen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415219</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 05 Dec 2007 11:35:38 GMT</pubDate></item></channel></rss>