<?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[Pointervariabeln verlieren den Inhalt]]></title><description><![CDATA[<p>Guten Abend,<br />
ich habe ein ziemlich blödes und merkwürdiges Problem. Meine Variabeln die ich mit Pointern erstellt habe, verlieren einfach ihren Wert, wenn ich z.b. ein strcpy ausführe oder andere funktionen.</p>
<p>Hier mal der gesammte code:</p>
<pre><code>void CClient::Parse(char *text)
{
	char buffer[1024];
	//memset(buffer,0,strlen(buffer));
	strcpy(buffer,text);
	char *Pa[10];
	s-&gt;Parse(buffer,Pa);
	if(strcmp(Pa[0],&quot;LOGIN&quot;) == 0)
	{
		printf(&quot;%s\n&quot;,Pa[0]);
		char szbuffer[200];
		sprintf(szbuffer,&quot;SELECT name,password FROM benutzer WHERE name = '%s'&quot;,Pa[1]);
		printf(&quot;a%s\n&quot;,Pa[0]);
		char *erg = NULL;
		erg = sql-&gt;Select(szbuffer);
		printf(&quot;a%s\n&quot;,Pa[0]);
		if(strcmp(erg,&quot;&quot;) == 0)
		{
			s-&gt;Send(&quot;300 wrong USER\n&quot;,sender);
			log-&gt;Print(&quot;Wrong Username\n&quot;);
		}
		else
		{
			printf(&quot;%s\n&quot;,Pa[0]);
			char *c_erg[10];
			//s-&gt;Parse(erg,c_erg);
			//printf(&quot;%s\n&quot;,Pa[0]);
			//printf(&quot;%s\n&quot;,c_erg[1]);
			if(strcmp(Pa[2],c_erg[1])==0)
			{
				s-&gt;Send(&quot;200 User Logged in\n&quot;,sender);
				log-&gt;Print(&quot;User Logged in\n&quot;);
			}
			else
			{
				s-&gt;Send(&quot;400 Wrong PW\n&quot;,sender);
				log-&gt;Print(&quot;Wrong Password\n&quot;);
			}
		}
	}
	else if(strcmp(Pa[0],&quot;LOGOUT&quot;) == 0)
	{
	}

}
/////////////////// und hier noch die s-&gt;Parse Methode

void CSocket::Parse(char *line,char *Params[])
{
	char buffer[1024];
	strcpy(buffer,line);
	char *ptr = NULL;
	ptr = strtok(buffer,&quot; &quot;);
	int i = 0;
	while(ptr != NULL)
	{
		Params[i] = ptr;
		ptr = strtok(NULL,&quot; &quot;);
		i++;	
	}
}
</code></pre>
<p>So das Parsen mit der CSocket::Parse funktioniert einwandfrei. Mein Array Params[] wird auch wunderbar erstellt.</p>
<p>Wenn ich aber jetzt in der CClient::Parse bin, dann funktioniert das strcmp einwandfrei. Also es wird Pa[0] verglichen und ist auch korrekt. Dann rufe ich die sprintf Funktion auf und dabei wird Pa[0] auf &quot;&quot; gesetzt. Genauso in der CSocket::Parse methode, nachdem ich strcpy ausgeführt habe, steht zwar alles in buffer drin, line ist aber leer.<br />
Das ist doch nicht korrekt, das der Speicher einfach geleert wird. Welchen Fehler habe ich dort??</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126277/pointervariabeln-verlieren-den-inhalt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 15:56:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126277.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Nov 2005 22:21:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointervariabeln verlieren den Inhalt on Sun, 13 Nov 2005 22:21:35 GMT]]></title><description><![CDATA[<p>Guten Abend,<br />
ich habe ein ziemlich blödes und merkwürdiges Problem. Meine Variabeln die ich mit Pointern erstellt habe, verlieren einfach ihren Wert, wenn ich z.b. ein strcpy ausführe oder andere funktionen.</p>
<p>Hier mal der gesammte code:</p>
<pre><code>void CClient::Parse(char *text)
{
	char buffer[1024];
	//memset(buffer,0,strlen(buffer));
	strcpy(buffer,text);
	char *Pa[10];
	s-&gt;Parse(buffer,Pa);
	if(strcmp(Pa[0],&quot;LOGIN&quot;) == 0)
	{
		printf(&quot;%s\n&quot;,Pa[0]);
		char szbuffer[200];
		sprintf(szbuffer,&quot;SELECT name,password FROM benutzer WHERE name = '%s'&quot;,Pa[1]);
		printf(&quot;a%s\n&quot;,Pa[0]);
		char *erg = NULL;
		erg = sql-&gt;Select(szbuffer);
		printf(&quot;a%s\n&quot;,Pa[0]);
		if(strcmp(erg,&quot;&quot;) == 0)
		{
			s-&gt;Send(&quot;300 wrong USER\n&quot;,sender);
			log-&gt;Print(&quot;Wrong Username\n&quot;);
		}
		else
		{
			printf(&quot;%s\n&quot;,Pa[0]);
			char *c_erg[10];
			//s-&gt;Parse(erg,c_erg);
			//printf(&quot;%s\n&quot;,Pa[0]);
			//printf(&quot;%s\n&quot;,c_erg[1]);
			if(strcmp(Pa[2],c_erg[1])==0)
			{
				s-&gt;Send(&quot;200 User Logged in\n&quot;,sender);
				log-&gt;Print(&quot;User Logged in\n&quot;);
			}
			else
			{
				s-&gt;Send(&quot;400 Wrong PW\n&quot;,sender);
				log-&gt;Print(&quot;Wrong Password\n&quot;);
			}
		}
	}
	else if(strcmp(Pa[0],&quot;LOGOUT&quot;) == 0)
	{
	}

}
/////////////////// und hier noch die s-&gt;Parse Methode

void CSocket::Parse(char *line,char *Params[])
{
	char buffer[1024];
	strcpy(buffer,line);
	char *ptr = NULL;
	ptr = strtok(buffer,&quot; &quot;);
	int i = 0;
	while(ptr != NULL)
	{
		Params[i] = ptr;
		ptr = strtok(NULL,&quot; &quot;);
		i++;	
	}
}
</code></pre>
<p>So das Parsen mit der CSocket::Parse funktioniert einwandfrei. Mein Array Params[] wird auch wunderbar erstellt.</p>
<p>Wenn ich aber jetzt in der CClient::Parse bin, dann funktioniert das strcmp einwandfrei. Also es wird Pa[0] verglichen und ist auch korrekt. Dann rufe ich die sprintf Funktion auf und dabei wird Pa[0] auf &quot;&quot; gesetzt. Genauso in der CSocket::Parse methode, nachdem ich strcpy ausgeführt habe, steht zwar alles in buffer drin, line ist aber leer.<br />
Das ist doch nicht korrekt, das der Speicher einfach geleert wird. Welchen Fehler habe ich dort??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/916850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/916850</guid><dc:creator><![CDATA[snoopdog]]></dc:creator><pubDate>Sun, 13 Nov 2005 22:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to Pointervariabeln verlieren den Inhalt on Sun, 13 Nov 2005 22:29:05 GMT]]></title><description><![CDATA[<p>Warum postest du C Code ins C++ Forum</p>
]]></description><link>https://www.c-plusplus.net/forum/post/916859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/916859</guid><dc:creator><![CDATA[frickelwerk]]></dc:creator><pubDate>Sun, 13 Nov 2005 22:29:05 GMT</pubDate></item><item><title><![CDATA[Reply to Pointervariabeln verlieren den Inhalt on Sun, 13 Nov 2005 23:14:07 GMT]]></title><description><![CDATA[<p>Ich glaube nicht das jetzt hier jemand Bock hat einen Buffer overrun in deinem C-Code zu suchen, wenn du es durch C++-Programmierung vermeiden könntest.</p>
<p>Setzen! Sechs!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/916897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/916897</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 13 Nov 2005 23:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Pointervariabeln verlieren den Inhalt on Mon, 14 Nov 2005 06:36:53 GMT]]></title><description><![CDATA[<p>snoopdog schrieb:</p>
<blockquote>
<p>Dann rufe ich die sprintf Funktion auf und dabei wird Pa[0] auf &quot;&quot; gesetzt. Genauso in der CSocket::Parse methode, nachdem ich strcpy ausgeführt habe, steht zwar alles in buffer drin, line ist aber leer.</p>
</blockquote>
<p>Evtl. Buffer Overruns? Mit Absicht machen die Funktionen das jedenfalls nicht. Probiers mal mit snprintf und strncpy. Oder machs in C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/916973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/916973</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 14 Nov 2005 06:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to Pointervariabeln verlieren den Inhalt on Mon, 14 Nov 2005 12:41:59 GMT]]></title><description><![CDATA[<p>Fängt damit an dass der Array Pa Teile eines Buffers enthält, der mal auf dem Stack von CSocket::Parse lag...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/917229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/917229</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 14 Nov 2005 12:41:59 GMT</pubDate></item></channel></rss>