<?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[Schreibgeschützter String manchmal beschreibbar, manchmal nicht?]]></title><description><![CDATA[<p>Hallo</p>
<p>An dieser Stelle (also an der Stelle wo ich ein Zeichen dem anderen zuweise, die if Abfrage und Positionierung des Cursors klappt einwandfrei, und auch die Positionen in der Zeichenkette sind laut Debugger die richtigen) bekomme ich von meinem Compiler immer eine Zugriffsverletzungsfehler beim Schreiben/Lesen auf Adresse...</p>
<pre><code class="language-cpp">if(w&gt;0)
	{
		gotoxy(0, 18);
		switch (w)
		{
	    case 1: cout &lt;&lt; a[z-1].name;
			punktx = strlen(a[z-1].name);
			cursor(punktx, b);  
			do{ 
			if (b == 8) // bei Backspace
			{
			i = punktx-1; //neuinitalisierung zählvariable
			while(a[z-1].name[i] != '/0')
			{
			a[z-1].name[i] = a[z-1].name[i+1];
			i=i++; 
			}
			cout &lt;&lt; a[z-1].name;
			}
		    else
			{
			a[z-1].name[punktx] = b;
			cout &lt;&lt; a[z-1].name[punktx];
			punktx = punktx + 1;
			}  
			cursor(punktx, b);
			}while(b!=13);
		    break;
		case 2:
...
</code></pre>
<p>Jetzt hab ich herausgefunden dass es sowas wie schreibgeschützte Zeichenketten gibt, und da mein Array über ein struct deklariert wird denke ich mal dass es eine ist.</p>
<pre><code class="language-cpp">struct datum
{
	char tag[3], monat[11], jahr[5];
};
struct t_adress
{
	char name[30], vorname[30], strasse[100], ort[100], hnr[10], plz[10];
	char flag;
	datum date;
};

....

void main()
{
	int auswahl=0, out=0, zsort=0;
	int zm = 6; //Menüeinträge
	t_adress adressen[10];

	do{
		switch (auswahl)
		{
		 ....
		case 4: edit(adressen);
			auswahl=zm+1;
			break;
		case 5: sort(adressen, zsort);
			auswahl=zm+1;
			break;
                 ....
</code></pre>
<p>alles schön und gut, und dann muss ich mir eben was überlegen wie ich das Problem löse, ABER, in einer anderen Funktion sortiere ich das Array, und da kann ich die strings Problemlos überschreiben.</p>
<pre><code class="language-cpp">t_adress temp[1];
	int i, j;

	if(zsort == 41)
	{
		for (i=0;i&lt;ds;i++)
		{
			for(j=1;j&lt;ds;j++)
			{
				if ( a[j-1].name[0] &gt; a[j].name[0])
				{
					temp[0] = a[j];
					a[j] = a[j-1];
					a[j-1] = temp[0];
				}
			}
		}
	}
</code></pre>
<p>Mich würde mal interessiern wieso das so ist, oder ob das vielleicht gar keine schreibgeschützten strings sind und ich irgendwas falsch mache.</p>
<p>Es sind ca. 400+ Zeilen Code, die wollte ich jetzt nicht komplett hier posten, aber wenn euch was zum verständnis fehlt (oder mein code zu verwirrend aussieht <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="😃"
    /> fragt ruhig) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke schonmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269708/schreibgeschützter-string-manchmal-beschreibbar-manchmal-nicht</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 14:37:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269708.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jun 2010 08:06:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 08:07:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>An dieser Stelle (also an der Stelle wo ich ein Zeichen dem anderen zuweise, die if Abfrage und Positionierung des Cursors klappt einwandfrei, und auch die Positionen in der Zeichenkette sind laut Debugger die richtigen) bekomme ich von meinem Compiler immer eine Zugriffsverletzungsfehler beim Schreiben/Lesen auf Adresse...</p>
<pre><code class="language-cpp">if(w&gt;0)
	{
		gotoxy(0, 18);
		switch (w)
		{
	    case 1: cout &lt;&lt; a[z-1].name;
			punktx = strlen(a[z-1].name);
			cursor(punktx, b);  
			do{ 
			if (b == 8) // bei Backspace
			{
			i = punktx-1; //neuinitalisierung zählvariable
			while(a[z-1].name[i] != '/0')
			{
			a[z-1].name[i] = a[z-1].name[i+1];
			i=i++; 
			}
			cout &lt;&lt; a[z-1].name;
			}
		    else
			{
			a[z-1].name[punktx] = b;
			cout &lt;&lt; a[z-1].name[punktx];
			punktx = punktx + 1;
			}  
			cursor(punktx, b);
			}while(b!=13);
		    break;
		case 2:
...
</code></pre>
<p>Jetzt hab ich herausgefunden dass es sowas wie schreibgeschützte Zeichenketten gibt, und da mein Array über ein struct deklariert wird denke ich mal dass es eine ist.</p>
<pre><code class="language-cpp">struct datum
{
	char tag[3], monat[11], jahr[5];
};
struct t_adress
{
	char name[30], vorname[30], strasse[100], ort[100], hnr[10], plz[10];
	char flag;
	datum date;
};

....

void main()
{
	int auswahl=0, out=0, zsort=0;
	int zm = 6; //Menüeinträge
	t_adress adressen[10];

	do{
		switch (auswahl)
		{
		 ....
		case 4: edit(adressen);
			auswahl=zm+1;
			break;
		case 5: sort(adressen, zsort);
			auswahl=zm+1;
			break;
                 ....
</code></pre>
<p>alles schön und gut, und dann muss ich mir eben was überlegen wie ich das Problem löse, ABER, in einer anderen Funktion sortiere ich das Array, und da kann ich die strings Problemlos überschreiben.</p>
<pre><code class="language-cpp">t_adress temp[1];
	int i, j;

	if(zsort == 41)
	{
		for (i=0;i&lt;ds;i++)
		{
			for(j=1;j&lt;ds;j++)
			{
				if ( a[j-1].name[0] &gt; a[j].name[0])
				{
					temp[0] = a[j];
					a[j] = a[j-1];
					a[j-1] = temp[0];
				}
			}
		}
	}
</code></pre>
<p>Mich würde mal interessiern wieso das so ist, oder ob das vielleicht gar keine schreibgeschützten strings sind und ich irgendwas falsch mache.</p>
<p>Es sind ca. 400+ Zeilen Code, die wollte ich jetzt nicht komplett hier posten, aber wenn euch was zum verständnis fehlt (oder mein code zu verwirrend aussieht <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="😃"
    /> fragt ruhig) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke schonmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919251</guid><dc:creator><![CDATA[Khani]]></dc:creator><pubDate>Wed, 30 Jun 2010 08:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 08:24:38 GMT]]></title><description><![CDATA[<p>Du greifst vermutlich an irgendeiner Stelle auf eine ungültige Arrayposition zu.</p>
<p>Da du statt C++ mit std::string, std::vector oder auch selbst geschriebenen Klassen lieber reines C benutzt, ist das vermeiden oder entdecken des Fehler natürlich nicht ganz einfach.</p>
<p>Und 400 Zeilen durchsuche ich dir sicher nicht nach dem Fehler <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>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919268</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 30 Jun 2010 08:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 08:41:10 GMT]]></title><description><![CDATA[<p>Was wir benutzen ist leider vorgeschrieben vom Lehrer in der Berufsschule... sonst sähe dass alles ganz anders aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich hab aber eigentlich mit dem Debugger geprüft auf welche Stelle er zugreift, das sah alles relativ richtig aus...</p>
<p>z.B. beim string &quot;Teest&quot; sah der Ausdruck im Debugger ungefähr so aus<br />
&quot;..[2] = ..[3]&quot; ... dass die Abfrage mit dem '/0' vielleicht probleme macht hab ich auch schon probiert und ihn wirklich nur mal 3 in 2 schreiben lassen, macht er aber auch nicht..</p>
<p>Den Fehler such ich gerne selbst, hätte nur gerne gewusst ob das wirklich an so nem &quot;schreibgeschützten&quot; array liegen kann oder eben an was anderem</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919280</guid><dc:creator><![CDATA[Khani]]></dc:creator><pubDate>Wed, 30 Jun 2010 08:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 09:04:26 GMT]]></title><description><![CDATA[<p>Kaum fragt man irgendwo nach löst sich das Problem fast von alleine... *schäm*</p>
<pre><code class="language-cpp">if (b == 8) // bei Backspace
			{
			i = punktx-1; //Neuinitialisierung Zählvariable
			do
			{
			a[z-1].name[i] = a[z-1].name[i+1];
			i=i++; 
			}while(i &lt; strlen(a[z-1].name));
			gotoxy(0,18);
			cout &lt;&lt; a[z-1].name;
			}
</code></pre>
<p>so klappts, sieht nach falscher Schleife und falscher Bedingung aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919290</guid><dc:creator><![CDATA[Khani]]></dc:creator><pubDate>Wed, 30 Jun 2010 09:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 09:23:32 GMT]]></title><description><![CDATA[<p>Bei so kurzen Quelltextabschnitten kann man Dir nur schwer helfen.</p>
<p>Fragen:<br />
Welchen Typ und Wert haben die Variablen w und z?</p>
<p>Nur so auf den ersten Blick ist in diesem Programm einiges nicht in Ordnung:<br />
<strong>In Zeile 16: i=i++;</strong><br />
Das ist doppelt gemoppelt, i++ ist schon was du hier brauchst.</p>
<p>In <strong>Zeile 13</strong> fragst Du nach dem Stringende bei i nach, greifst jedoch<br />
auf die Position i+1 in Zeile 15 zu.</p>
<p>Was passiert wenn <em>punktx</em> NULL wird?</p>
<p><strong>Zeile 14 void main()</strong><br />
sollte immer zumindest ein <strong>int</strong> zurück liefern.</p>
<p>Die Benutzung von char[] ist nicht zu empfehlen, da der Speicherbereich fix ist.<br />
Nur wenn die Zeichenketten außerhalb der Main-Funktion vereinbart wurden, sind die Variablen<br />
automatisch mit NULL vorbelegt. Benutzt du diesen Ansatz in Funktionen, so ist der Inhalt<br />
undefiniert und es muss erst manuell auf Null gesetzt werden.</p>
<p>&quot;Jetzt hab ich herausgefunden dass es sowas wie schreibgeschützte Zeichenketten gibt, und da mein Array über ein struct deklariert wird denke ich mal dass es eine ist.&quot;</p>
<p>Da sehe ich nichts von <em>const</em>.<br />
Die Zeichenketten sind nicht schreibgeschützt.</p>
<p>Ein Lösungsansatz ist überall wo du Probleme hast ein <em>printf</em> einzufügen und alle Werte und Positionen anschauen. Dann sollte das Problem(e) schnell gelöst sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919304</guid><dc:creator><![CDATA[trooper]]></dc:creator><pubDate>Wed, 30 Jun 2010 09:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 09:43:39 GMT]]></title><description><![CDATA[<p>Vielen dank schonmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>w und z sind beide vom Typ int und haben zumindest bei meinen Test beide den Wert 1, da über w im Switch geprüft wird ob der Benutzer z.B. mit 1 das Element &quot;name&quot;, mit 2 &quot;vorname&quot; etc... bearbeiten will, ist w=0 will der Benutzer nichts bearbeiten.<br />
Über z wird der jeweilige komplette Datensatz angesteuert, also hier mit 0 die erste Zeile/das erste Element..</p>
<p>Danke für die Hinweise mit i++ und int main... das mit dem Stringende hab ich irgendwie nie so ganz verstanden, deswegen war da auch der Wurm drin mit dem /0.<br />
Das ichs jetzt mit strlen() mache (mitlerweile mit strlen()+1 weils irgendwie nur so funktioniert), ist wohl auch nicht die optimalste Lösung denke ich.</p>
<p>char[] wurde uns so vorgegeben... aber für mein Verständnis, was heißt denn außerhalb der main funktion? nur wenn ich es als const deklariere?</p>
<p>Und Zeichenketten sind dann also auch nur schreibgeschützt wenn als const deklariert?</p>
<p>EDIT:<br />
Achja, und wenn punktx NULL ist das muss ich noch abfangen denk ich.</p>
<p>Bin da bei allem noch ziemlich unsicher, lerne zwar schon seit 2 Jahren c und c++ grundlagen, aber hab jetzt in der Berufsschule neu angefangen, und das Programm ist eine Langzeitaufgabe das abgeändert, verbessert und erweitert werden soll je mehr wir über die drei Jahre (jetzt noch 2) dazu lernen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919312</guid><dc:creator><![CDATA[Khani]]></dc:creator><pubDate>Wed, 30 Jun 2010 09:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schreibgeschützter String manchmal beschreibbar, manchmal nicht? on Wed, 30 Jun 2010 10:08:32 GMT]]></title><description><![CDATA[<p>&quot;...was heißt denn außerhalb der main funktion?&quot;<br />
Dafür schau dir mal das kleine Programm hier an!</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
int *ptr;
int i;

// &lt;COMPILE&gt;g++ -o nullsetzten nullsetzten.cpp&lt;/COMPILE&gt;

void fnk(void) {
  int *ptr;
  int i;
  printf(&quot;fnk:\n&quot;);
  printf(&quot; pointer: %x\n&quot;, ptr);
  printf(&quot;     int: %i\n&quot;, i);
}

int main(int argc, char **argv) {
  printf(&quot;global:\n&quot;);
  printf(&quot; pointer: %x\n&quot;, ptr);
  printf(&quot;     int: %i\n\n&quot;, i);
  printf(&quot;fnk:\n&quot;);
  fnk();
  return 0;
}
</code></pre>
<p>... nur wenn ich es als const deklariere?<br />
Ja genau. Nur Variablen die mit const=Konstante vereinbart wurden.</p>
<p>Gruß<br />
trooper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1919331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1919331</guid><dc:creator><![CDATA[trooper]]></dc:creator><pubDate>Wed, 30 Jun 2010 10:08:32 GMT</pubDate></item></channel></rss>