<?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[fgets Problem.]]></title><description><![CDATA[<p>Hallo, am besten schildere ich zuerst mal, was ich bezwecken will und was ich für Probleme dabei habe. Also: Das Programm soll zuerst eine mehrstellige Zahl aus Informationen des Computers bilden. Das funktioniert soweit auch. Diese Zahl hat allerdings nicht bei jedem PC die selbe Länge. Als nächstes will ich dann aus einer .ini Datei, die voll mit Zahlenfolgen ist, diese durchsuchen, ob die aus dem PC ausgelesene Zahl dabei ist. Die .ini sieht in etwa so aus:<br />
5464654564<br />
32131561<br />
548695154156416<br />
213513213<br />
32132</p>
<p>Das Problem ist nun, dass das Auslesen und der daraufhin folgende string compare nicht funktionieren, wenn ich die größe des char array, in die ich aus der .ini auslese, einfach mal z.b. auf 256 setze. Es funktioniert nur, wenn das array auch so groß ist, wie die länge der Zahlen +1.<br />
Dazu am besten mal mein Code.</p>
<pre><code class="language-cpp">char cNumber[256];
sprintf(cNumber, &quot;%d&quot;, Number);
// cNumber ist das char array, was ich nachher zum strcmp benutze
// Number ist die aus dem PC ausgelesene Zahl mit unterschiedlicher Länge

char tmpINI[256];
bool bCheck = false;
	if (filePtr != NULL)
	{
		for (int i = 1; i &lt;= 100; i++)
		{

		if (!bCheck)
		{
			fgets(tmpINI, 256, filePtr);

			if(strcmp(cNumber, tmpINI) == 0)
			{
				bCheck = true;
				std::cout &lt;&lt; &quot; Funktioniert &quot; &lt;&lt; std::endl;
			}

			if (i == 100 &amp;&amp; !bVerified)
			{
				std::cout &lt;&lt; &quot; Hat nicht funktioniert &quot; &lt;&lt; std::endl;
				Sleep(2000);
				exit(1);
			}

		}
		}
        // file close etc
	//...
	}
</code></pre>
<p>Wenn ich jetzt z.b. in tmpINI eine 10 Stellige Zahl einlese, tmpINI so definiere char tmpINI[11] und cNumber ein 10 char array ist, dann funktioniert es. Sobald die Größen aber unterschiedlich sind, funktioniert es nicht mehr.<br />
Es wäre echt super, wenn mir jemand helfen könnte.<br />
Danke schonmal<br />
Gruß Michel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305489/fgets-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 19:59:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305489.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Jun 2012 14:15:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fgets Problem. on Sat, 30 Jun 2012 14:18:18 GMT]]></title><description><![CDATA[<p>Hallo, am besten schildere ich zuerst mal, was ich bezwecken will und was ich für Probleme dabei habe. Also: Das Programm soll zuerst eine mehrstellige Zahl aus Informationen des Computers bilden. Das funktioniert soweit auch. Diese Zahl hat allerdings nicht bei jedem PC die selbe Länge. Als nächstes will ich dann aus einer .ini Datei, die voll mit Zahlenfolgen ist, diese durchsuchen, ob die aus dem PC ausgelesene Zahl dabei ist. Die .ini sieht in etwa so aus:<br />
5464654564<br />
32131561<br />
548695154156416<br />
213513213<br />
32132</p>
<p>Das Problem ist nun, dass das Auslesen und der daraufhin folgende string compare nicht funktionieren, wenn ich die größe des char array, in die ich aus der .ini auslese, einfach mal z.b. auf 256 setze. Es funktioniert nur, wenn das array auch so groß ist, wie die länge der Zahlen +1.<br />
Dazu am besten mal mein Code.</p>
<pre><code class="language-cpp">char cNumber[256];
sprintf(cNumber, &quot;%d&quot;, Number);
// cNumber ist das char array, was ich nachher zum strcmp benutze
// Number ist die aus dem PC ausgelesene Zahl mit unterschiedlicher Länge

char tmpINI[256];
bool bCheck = false;
	if (filePtr != NULL)
	{
		for (int i = 1; i &lt;= 100; i++)
		{

		if (!bCheck)
		{
			fgets(tmpINI, 256, filePtr);

			if(strcmp(cNumber, tmpINI) == 0)
			{
				bCheck = true;
				std::cout &lt;&lt; &quot; Funktioniert &quot; &lt;&lt; std::endl;
			}

			if (i == 100 &amp;&amp; !bVerified)
			{
				std::cout &lt;&lt; &quot; Hat nicht funktioniert &quot; &lt;&lt; std::endl;
				Sleep(2000);
				exit(1);
			}

		}
		}
        // file close etc
	//...
	}
</code></pre>
<p>Wenn ich jetzt z.b. in tmpINI eine 10 Stellige Zahl einlese, tmpINI so definiere char tmpINI[11] und cNumber ein 10 char array ist, dann funktioniert es. Sobald die Größen aber unterschiedlich sind, funktioniert es nicht mehr.<br />
Es wäre echt super, wenn mir jemand helfen könnte.<br />
Danke schonmal<br />
Gruß Michel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228690</guid><dc:creator><![CDATA[Michel A.]]></dc:creator><pubDate>Sat, 30 Jun 2012 14:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to fgets Problem. on Sat, 30 Jun 2012 14:19:59 GMT]]></title><description><![CDATA[<p>Sprache? Bis auf 2 Zeilen(20,26) ist das reines C. C++ und C mischen kommt nie gut, da brauchst du dich über Fehler nicht zu wundern.</p>
<p>Dein cNumber ist übrigens nicht nullterminiert, daher ist der Stringvergleich sowieso undefiniert. Mit C++ könnte man das mittels der Stringklasse trivial lösen, in C musst du lernen, wie das mit der Zeichenkettendarstellung genau funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228691</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 30 Jun 2012 14:19:59 GMT</pubDate></item></channel></rss>