Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [C] Auf einzelne Stringelemente zugreifen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.07.2007, 14:27 Uhr
cfx



Hallo,
Man liest ja des Öfteren, dass ein String sowohl mit char *name als auch char name[] deklariert werden kann. (bzw. auch char name[Anz_Zeichen] )

Nun ja... , folgendes Beispielprogramm dazu:

C++:
#include <stdio.h>

int
main ()
{
    char tmp[] = "Test";
    char *temp = "Test";

    if (tmp[2] == 's')
        puts ("Stimmt so.");

    if (temp[2] == 's')
        puts ("Stimmt so.");

    puts("");

    puts (tmp);
    tmp[2] = 'x';
    puts (tmp);

    puts("");

    puts (temp);
    temp[2] = 'x';
    puts (temp);

    return 0;
}



So, wenn ich das dann mit GCC 4.1.2 kompiliere und in einer Shell ausführe, erhalte ich folgendes Resultat:

Zitat:

Stimmt so.
Stimmt so.

Test
Text

Test
Speicherzugriffsfehler



Kann mir jetzt einer erklären, warum ich beim Vergleich mit einer If-Anweisung auf die einzelnen Stringelemente zugreifen kann, wenn ich diese aber ändere, funktioniert nur die Deklaration mit char tmp[] = "Test" ???

Sind doch beides Zeiger auf char. Also warum geht das nicht ?

Gruß cfx

Dieser Post wurde am 28.07.2007 um 14:28 Uhr von cfx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.07.2007, 16:38 Uhr
~hugo boss
Gast



C++:
    char *temp = "Test";
    // Das ist ein Zeiger auf eine konstante nullterminierte Zeichenkette
    // deshalb der Speicherzugriffsfehler, wenn du versuchst temp[2] mit 'x' neu zubelegen.




 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.07.2007, 18:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
char *temp = "Test";



ist wie mein vorredner schon sagte - eigentlich ein


C++:
const char *test = "Test";
char *temp = (char*)test;



dadurch krachts bei der Zuweisung.
--
class God : public ChuckNorris { };

Dieser Post wurde am 28.07.2007 um 18:29 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.07.2007, 09:19 Uhr
cfx



Danke. Das mit dem const wusste ich nicht.
Man hätte es aber in meiner Referenz ruhig erwähnen können...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.07.2007, 09:31 Uhr
(un)wissender
Niveauwart


Wenn du da was verändern willst, kopiere den string und nimm die Änderungen dort vor.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.07.2007, 09:50 Uhr
cfx



Auch eine Möglichkeit.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: