<?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[Speicherzugriffsfehler char*]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem: Ich habe eine Funktion, in der ich auf die einzelnen Elmente des übergebenen Strings zugreifen will, um diese zu verändern (bsp. zur Realisierung einer erase() Funktion). Leider bekomme ich bei (*) in den folgenden Funktionen einen Speicherzugriffsfehler.<br />
Ich habe es per ** aber auch per Zeigerreferenz probiert.<br />
Wer kann mir einen Tip/Hinweis geben?</p>
<pre><code class="language-cpp">char *my_func(char **s1)
{
	(*s1)[0] = 'A'; // (*)
	return *s1;

}
char *my_func2(char *&amp;s1, int pos1, int n)
{
	s1[0] = 'A'; // (*)
	return s1;

}

// Aufruf in main()

char* test = &quot;Hallo Welt&quot;;
my_func(&amp;test);
my_func2(test);
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144638/speicherzugriffsfehler-char</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 19:39:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144638.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Apr 2006 22:34:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 22:34:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes Problem: Ich habe eine Funktion, in der ich auf die einzelnen Elmente des übergebenen Strings zugreifen will, um diese zu verändern (bsp. zur Realisierung einer erase() Funktion). Leider bekomme ich bei (*) in den folgenden Funktionen einen Speicherzugriffsfehler.<br />
Ich habe es per ** aber auch per Zeigerreferenz probiert.<br />
Wer kann mir einen Tip/Hinweis geben?</p>
<pre><code class="language-cpp">char *my_func(char **s1)
{
	(*s1)[0] = 'A'; // (*)
	return *s1;

}
char *my_func2(char *&amp;s1, int pos1, int n)
{
	s1[0] = 'A'; // (*)
	return s1;

}

// Aufruf in main()

char* test = &quot;Hallo Welt&quot;;
my_func(&amp;test);
my_func2(test);
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040972</guid><dc:creator><![CDATA[matko]]></dc:creator><pubDate>Wed, 19 Apr 2006 22:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 22:38:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char* test = &quot;Hallo Welt&quot;;
</code></pre>
<p>legt den string im ROM ab.</p>
<pre><code class="language-cpp">char test[] = &quot;Hallo Welt&quot;;
</code></pre>
<p>benutzt RAM.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040974</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 19 Apr 2006 22:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 22:43:21 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort,</p>
<p>aber das löst das Problem nicht. Es ist mir bekannt das char test[] einen konstanten Zeiger anlegt.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040978</guid><dc:creator><![CDATA[matko]]></dc:creator><pubDate>Wed, 19 Apr 2006 22:43:21 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 23:04:47 GMT]]></title><description><![CDATA[<p>matko schrieb:</p>
<blockquote>
<p>Danke für die schnelle Antwort,<br />
aber das löst das Problem nicht. Es ist mir bekannt das char test[] einen konstanten Zeiger anlegt.<br />
Gruß</p>
</blockquote>
<p>dann zeig mal ein möglichst kleines komplettes programm, das diesen fehler macht.<br />
meines dafürhaltens nach geht nämlich dein code, wenn du meine änderung benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040984</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 23:28:40 GMT]]></title><description><![CDATA[<p>du solltest auf volkard hören. char test[] erzeugt keinen konstanten zeiger, sondern einen array. ein konstanter zeiger wäre char *const. was du eigentlich verwendest ist aber ein const char * bzw. char const *. das ist in der tat eine der schwächen von c/c++, dass du ein string-literal in einen nicht konstanten zeiger umwandeln kannst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040988</guid><dc:creator><![CDATA[Gideon]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 23:33:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

char *my_func(char *&amp;strf){

  // 1.)
  //----------------------------------------------
  char *temp=&quot;Hallo Welt&quot;;
  strf=temp;   				// funktioniert

  // 2.)
  //----------------------------------------------
  cout&lt;&lt;strf[2]&lt;&lt;endl;			// funktioniert

  // 3.)
  //----------------------------------------------
  strf[2] = &quot;A&quot;;			// Das geht nicht
					// Erhalte Speicherzugriffsfehler

  return strf;
}

int main(){

  char *strh=&quot;Hallo&quot;;

  cout&lt;&lt;strh&lt;&lt;endl;

  my_func(strh);

  cout&lt;&lt;strh&lt;&lt;endl;

  return 0;
}
</code></pre>
<p>Konkret geht es dabei um Funktionen wie z.B erase() oder replace() die die Stringfunktionalitäten der cpp-Strings auch für c-Strings bereitstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040990</guid><dc:creator><![CDATA[matko]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 23:36:42 GMT]]></title><description><![CDATA[<p>Gideon schrieb:</p>
<blockquote>
<p>...char test[] erzeugt keinen konstanten zeiger, sondern einen array. ein konstanter zeiger wäre char *const. was du eigentlich verwendest ist aber ein const char * bzw. char const *...</p>
</blockquote>
<p>Ist ein Array (z.B. char str[20]; ) nicht auch ein konstanter Zeiger, da die Anfangsadresse nicht veränderbar ist?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1040993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040993</guid><dc:creator><![CDATA[matko]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 23:55:34 GMT]]></title><description><![CDATA[<p>das stimmt. allerdings musst du zwischen konstanten zeigern und zeigern auf konstanten unterscheiden.</p>
<pre><code class="language-cpp">const char *foo; // du darfst den zeiger ändern, aber nicht den inhalt
*foo = 0; // fehler
foo = &quot;foo&quot;; // ok

char *const bar; // du darfst den inhalt ändern, aber nicht den zeiger
*bar = 0; // ok
bar = &quot;bar&quot;; // fehler
</code></pre>
<p>so weit, so gut. aus irgendwelchen gründen erlaubt c/c++ nun aber dieses konstrukt</p>
<pre><code class="language-cpp">char *qux = &quot;qux&quot;; // &quot;qux&quot; ist const char *, wird aber implizit zu char *
*qux = 0; // boom! der inhalt von qux darf nicht geändert werden, aber es kompiliert trotzdem!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1040999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1040999</guid><dc:creator><![CDATA[Gideon]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Wed, 19 Apr 2006 23:55:07 GMT]]></title><description><![CDATA[<p>du meintest<br />
strf[2] = 'A'; // Das geht nicht<br />
statt &quot;A&quot; nehme ich an.</p>
<p>dann erhalte ich auch nen speicherzugriffsfehler.</p>
<p>mache ich dann<br />
char temp[]=&quot;Hallo Welt&quot;;<br />
draus, gehts.</p>
<pre><code>Hallo
l
HaAlo Welt
</code></pre>
<p>es kommt nicht drauf an, daß die zeiger unveränderlich ist, sondern das das zeug, wo die zeiger draufzeigen unveränderlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041000</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 19 Apr 2006 23:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 00:43:28 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten und das um diese Zeit.<br />
Jetzt ist es mir klar geworden.</p>
<p>Ist das mit der Typenumwandlung vom Compiler abhängig und aus<br />
welchen Gründen wird diese vorgenommen?</p>
<p>Danke!<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041009</guid><dc:creator><![CDATA[matko]]></dc:creator><pubDate>Thu, 20 Apr 2006 00:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 00:57:00 GMT]]></title><description><![CDATA[<p>matko schrieb:</p>
<blockquote>
<p>Vielen Dank für die Antworten und das um diese Zeit.<br />
Jetzt ist es mir klar geworden.</p>
<p>Ist das mit der Typenumwandlung vom Compiler abhängig und aus<br />
welchen Gründen wird diese vorgenommen?</p>
<p>Danke!<br />
Grüße</p>
</blockquote>
<p>typumwandlung? ka.<br />
aber ich erzähl dir, warum stringliterale konstant sind.</p>
<p>der compiler macht ja aus</p>
<pre><code class="language-cpp">char* hw=&quot;hello, world!&quot;;
</code></pre>
<p>sowas wie</p>
<pre><code class="language-cpp">//irgendwo im speicher zum beispiel an adresse 0x4711 stehen die
//datenbytes &quot;hello, world!&quot;
char* hw=0x4711;
</code></pre>
<p>die datenbytes stehen so in der exe-datei und werden beim starten in den speicher geladen.</p>
<p>dem compiler ist darüberhinaus erlaubt, aus</p>
<pre><code class="language-cpp">char* hw=&quot;hello, world!&quot;;
char* w=&quot;world!&quot;;
</code></pre>
<p>ein pfiffiges</p>
<pre><code class="language-cpp">char* hw=&quot;hello, world!&quot;;
char* w=hw+7;
</code></pre>
<p>zu machen. er faßt also strings zusammen, wenn es geht.</p>
<p>schreibst du jetzt</p>
<pre><code class="language-cpp">char* hw=&quot;hello, world!&quot;;
char* w=&quot;world!&quot;;
*w='W';
</code></pre>
<p>dann haste BEIDE strings verändert.<br />
um sowas zu vermeiden, liegen die strings am besten in einem speichersegment, das als schreibgeschützt markiert ist. zum beispiel dort, wo der ausführbare maschinencode des programms liegt, der sollte auch schreibgeschützt sein, das wäre ganz nett.</p>
<p>wenn du aber mit char hw[]=&quot;hello, world&quot;; ein array of char auf dem stack anlegst, gehört es dir ganz alleine und ist eine kopie des strings aus dem schreibgeschützen speicher. entsprechend muß es auch immer wieder angelegt werden, was ein bißchen zeit kostet, aber nicht viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041012</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 20 Apr 2006 00:57:00 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 06:26:47 GMT]]></title><description><![CDATA[<p>matko schrieb:</p>
<blockquote>
<p>Ist das mit der Typenumwandlung vom Compiler abhängig und aus<br />
welchen Gründen wird diese vorgenommen?</p>
</blockquote>
<p>Das ist Abwärtskompatibilität zu C (&quot;damals&quot; galten String-Literale noch als char* - und um alte C-Programme in C++ weiternutzen zu können, wurde die Umwandlung eines (const char*) String-Literals nach char* im C++ Standard genehmigt).</p>
<p>PS: Ein Bonustip von mir: Nimm lieber std::string, da bist du auf der sicheren Seite.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041039</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 06:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 09:49:50 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>PS: Ein Bonustip von mir: Nimm lieber std::string, da bist du auf der sicheren Seite.</p>
</blockquote>
<p>mein tip: hör nicht drauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041155</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 20 Apr 2006 09:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 09:53:56 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>PS: Ein Bonustip von mir: Nimm lieber std::string, da bist du auf der sicheren Seite.</p>
</blockquote>
<p>mein tip: hör nicht drauf.</p>
</blockquote>
<p>Was soll so eine scheiss Antwort? Begründung bitte!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041159</guid><dc:creator><![CDATA[C++ Poll]]></dc:creator><pubDate>Thu, 20 Apr 2006 09:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 09:56:19 GMT]]></title><description><![CDATA[<p>Was hast du gegen std::string? Ehe ich mich mit der Speicherverwaltung und -Sicherheit rumschlage, verwende ich lieber eine Klasse, die das für mich erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041163</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Apr 2006 09:56:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Thu, 20 Apr 2006 09:59:26 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Was hast du gegen std::string? Ehe ich mich mit der Speicherverwaltung und -Sicherheit rumschlage, verwende ich lieber eine Klasse, die das für mich erledigt.</p>
</blockquote>
<p>mir scheint, matko arbeitet sich gerade toll in zeiger und so ein. ist das nicht wunderbar?<br />
ok, klar soll er bei den meisten sachen umsteigen, kommt immer auf das programm an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1041165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1041165</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 20 Apr 2006 09:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Sat, 22 Apr 2006 09:56:22 GMT]]></title><description><![CDATA[<p>Danke für die echt ausfürlichen Antworten.<br />
Natürlich ist das Arbeiten mit c++ strings einfacher, aber es gibt nunmal auch Vorgaben das man numr mit Zeigern arbeiten darf (durch den Prof z.B <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="😉"
    /> ).<br />
Das Verstehen und Anwenden mit Zeigern mit den großen Möglichkeiten ist für mich von Interesse.</p>
<p>Gruß &amp; Thx<br />
matko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1042438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1042438</guid><dc:creator><![CDATA[matko]]></dc:creator><pubDate>Sat, 22 Apr 2006 09:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler char* on Sat, 22 Apr 2006 21:39:11 GMT]]></title><description><![CDATA[<p>matko schrieb:</p>
<blockquote>
<p>Ist ein Array (z.B. char str[20]; ) nicht auch ein konstanter Zeiger</p>
</blockquote>
<p>Nein, ist es nicht und wird es auch niemals sein. Ein Array ist nunmal kein Zeiger. Ein Compiler darf aber bei Bedarf ein Array in einen Zeiger auf das erste Element umwandeln. Dieser Zeiger kann, muss aber nicht konstant sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1043036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1043036</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sat, 22 Apr 2006 21:39:11 GMT</pubDate></item></channel></rss>