Jemand mit "C" Kenntnissen (nicht Conrad)

Antworten
Benutzeravatar
Quaxx
Beiträge: 1099
Registriert: 13.01.2005 13:29:11
Wohnort: Berlin

#1 Jemand mit "C" Kenntnissen (nicht Conrad)

Beitrag von Quaxx »

Ich spiele gerade mit C rum und mir bereitet folgender, kleiner Codeschnipsel sorgen:

Code: Alles auswählen

int main() {
  char *string1 = "stringkurz";
  char *string2 = "stringlaenger";
  printf("vorher: %s\n",string1);
  string1 = string2;
  printf("nachher: %s\n",string1);
  return 0;
}
Mir macht das dahingehend Sorgen, das das Ganze funktioniert, nicht das es nicht funktioniert!

Eigentlich sollte es zu einem Segfault kommen, wenn ich den größeren String2 im kleineren String1 speichere, oder habe ich einen Denkfehler?

Kann mir das jemand mit tiefergehendem Wissen erklären?

Steffen
T-Rex 450 (ohne V2, SE oder sowas), Pikke 450, Picc Pro, MWC (i.A.)

Merke: Ist es zu kalt zum Fliegen/weht zu viel Wind, lass' es bleiben!
----------------------------------------------------------------------------------
Der kleine Wiki braucht Hilfe, bitte hilf ihm: (http://wiki.rc-heli-fan.org/)
Treeda

#2

Beitrag von Treeda »

Also wenn ich das richtig sehe ist das doch ok du kopierst ja nicht den string sondern nur den pointer auf den string.
Benutzeravatar
Quaxx
Beiträge: 1099
Registriert: 13.01.2005 13:29:11
Wohnort: Berlin

#3

Beitrag von Quaxx »

Kopf->Tisch, danke! Das erklärt das Ganze!

Vielen Dank :mrgreen:
Steffen
T-Rex 450 (ohne V2, SE oder sowas), Pikke 450, Picc Pro, MWC (i.A.)

Merke: Ist es zu kalt zum Fliegen/weht zu viel Wind, lass' es bleiben!
----------------------------------------------------------------------------------
Der kleine Wiki braucht Hilfe, bitte hilf ihm: (http://wiki.rc-heli-fan.org/)
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#4

Beitrag von speedy »

hmm, aber das dürfte trotzdem Probleme machen ... du schließt den String nicht mit nem \0 ab ... somit dürfte da noch jede Menge anderes Zeug mit ausgegeben werden.


MFG,
speedy
peter.stegemann

#5

Beitrag von peter.stegemann »

speedy hat geschrieben:hmm, aber das dürfte trotzdem Probleme machen ... du schließt den String nicht mit nem \0 ab ... somit dürfte da noch jede Menge anderes Zeug mit ausgegeben werden.
Du solltest nicht nachts um 3 posten. :-) Bei char *string1 = "stringkurz"; haengt der Compiler die 0 an.
Benutzeravatar
Groucho
Beiträge: 1429
Registriert: 07.11.2004 12:56:16
Wohnort: Überlingen

#6 Re: Jemand mit "C" Kenntnissen (nicht Conrad)

Beitrag von Groucho »

Quaxx hat geschrieben: Eigentlich sollte es zu einem Segfault kommen, wenn ich den größeren String2 im kleineren String1 speichere, oder habe ich einen Denkfehler?
Du willst einen Segfault ? :cool:

Bitte schön, ersetzen von string1=string2 durch strcpy (string2,string1) erhöht die Wahrscheinlichkeit enorm.

Wenn dann die Deklaration von string2 auch noch
char* string2;
lautet, kann nichts mehr schief gehen :twisted:

Oliver

Flugstatus: Gründer der Gesellschaft zur Verminderung der Akzeptanz von Schwerkraft

Gallerie: http://www.rc-heli-fan.org/gallery/albu ... um_id=1704
Benutzeravatar
Quaxx
Beiträge: 1099
Registriert: 13.01.2005 13:29:11
Wohnort: Berlin

#7 Re: Jemand mit "C" Kenntnissen (nicht Conrad)

Beitrag von Quaxx »

GrouchoAirService hat geschrieben:
Quaxx hat geschrieben: Eigentlich sollte es zu einem Segfault kommen, wenn ich den größeren String2 im kleineren String1 speichere, oder habe ich einen Denkfehler?
Du willst einen Segfault ? :cool:

Bitte schön, ersetzen von string1=string2 durch strcpy (string2,string1) erhöht die Wahrscheinlichkeit enorm.

Wenn dann die Deklaration von string2 auch noch
char* string2;
lautet, kann nichts mehr schief gehen :twisted:

Oliver
:mrgreen: Nein, ich habe dieses Codeschnipselchen in einem Programm gefunden, welches ich gerade ändere und ich konnte es mir nicht so ganz erklären (noch nicht so fit in C)... Ich will ja keinen Segfault, mich hat's halt nur gewundert...

Steffen
T-Rex 450 (ohne V2, SE oder sowas), Pikke 450, Picc Pro, MWC (i.A.)

Merke: Ist es zu kalt zum Fliegen/weht zu viel Wind, lass' es bleiben!
----------------------------------------------------------------------------------
Der kleine Wiki braucht Hilfe, bitte hilf ihm: (http://wiki.rc-heli-fan.org/)
speedy
Beiträge: 9028
Registriert: 22.10.2004 10:45:57
Wohnort: Stuttgart
Kontaktdaten:

#8

Beitrag von speedy »

Du solltest nicht nachts um 3 posten.
Und dabei hab ich mir solche Mühe gegeben, daß es Punkt 3 Uhr ist. ;) ... aber daß der Compiler in C auch mal was von selbst macht und man ihn nicht bitten muß, war mir nicht wirklich bewußt - aber klingt logisch. (jetzt tagsüber :) )


MFG,
speedy
Antworten

Zurück zu „Klönschnack“