Hallo Leute. Habe mir einen C Code angeschaut und bin dabei auf die Bezeichnungen char* x und char *x gestoßen. Was ist der Unterschied? Letzteres legt soweit ich weiss einen Pointer auf ein char an. x = 1024; setzt den Pointer auf Adtresse 1024 und *x = 2; setzt die Speicherstelle 1024 auf 2. aber was ist der andere "Ausdruck"? Helft mir bitte. Danke im voraus.
Ist das gleiche. Man muss freilich aufpassen, wenn man mehrere Variablen in einer Zeile deklariert. char* x, y; ist nicht äquivalent zu char *x, *y;
Ok. Danke. Noch ne wichtige Frage: char string2[20]="red dwarf"; char string1[20]=""; strcpy(string1, string2); Das hier kopiert string 2 in string 1. aber laut anleitung ist der Syntax der Funktion: strncpy(char *s1, const char *s2); Das würde ja bedeuten, dass ich die Adressen der Strings übergeben muss also so: strncpy(&string1, &string2); Kann mir bitte jemand helfen. Schnall das nicht so wirklich....
M. H. schrieb: > Das würde ja bedeuten, dass ich die Adressen der Strings übergeben muss machst du ja. char string2[20]="red dwarf"; ist identisch mit char* string2="red dwarf";
Vielen Dank. Jetz hat das ganze ne gewisse Logik :) (Freu mich wie ein Schnitzel) M.H.
> char string2[20]="red dwarf"; > char string1[20]=""; string ist damit ein char[], das in c/c++ (fast) gleich einem char* ist. > strcpy(string1, string2); > > Das hier kopiert string 2 in string 1. aber laut anleitung ist der > Syntax der Funktion: > > strncpy(char *s1, const char *s2); Damit stimmt das dann auch. Gruß Klaus
Also, du hast zwei Möglichkeiten: strcpy(string1, string2); string1 und strin2 SIND bereits die Adressen! Oder: strcpy(&string1[0], &string2[0]); Liefert dir die Adresse des jeweils ersten Elements, also die des Strings. Obacht: Du hast beim zweiten mal strncpy geschrieben! Man sollte auch strncpy verwenden, da man so angeben kann, wie viel Bytes maximal kopiert werden: char *strncpy(char *dest, const char *src, size_t n);
Peter II schrieb: > char string2[20]="red dwarf"; ist identisch mit char* string2="red > dwarf"; Nein. Den Test der ersten Version kann man überschreiben, den Text der zweiten (sollte) man nicht. Zudem besteht ein deutlicher Unterschied im Platzverbrauch.
A. K. schrieb: > Peter II schrieb: > >> char string2[20]="red dwarf"; ist identisch mit char* string2="red >> dwarf"; > > Nein. Den Test der ersten Version kann man überschreiben, den Text der > zweiten (sollte) man nicht. Zudem besteht ein deutlicher Unterschied im > Platzverbrauch. Das ist korrekt. Erklären sollte man das evtl. etwas genauer: char string2[20]; reserviert zunächst einfach 20 Byte an Speicher (im RAM). Mit char string2[20] = "irgendetwas"; wird dieser Speicher beim Programmstart noch initialisiert (hoffentlich). Dabei wird auch noch automatisch eine 0 hinter das letzte Zeichen gesetzt. char *string2 = "irgendetwas"; reserviert Speicher für "irgendetwas" + 0-Byte. Das kann ggf. sogar im ROM liegen, weil es als Konstante verstanden wird. Zusätzlich wird Speicher für einen Zeiger darauf reserviert. Somit kann der zweite Ausdruck in der Tat weniger Speicher brauchen: char *string2 = "f"; reserviert nur Platz für einen Zeiger und eine Konstante "f", also wahrscheinlich 4 Bytes auf einem AVR.
ok. danke. das hat mir sehr geholfen (auch wenn der code von einem pic32 ist) :)
Peter II schrieb: > char string2[20]="red dwarf"; ist identisch mit char* string2="red > dwarf"; !!! NEIN !!! Denn im Fall char* string2 = "red dwarf"; ist string2 eine Variable und ich darf später einen anderen Wert zuweisen. z.B. string2 = "abc"; oder string2++; Das geht mit char string[20] = "red dwarf"; nicht, da hier string2 keine Variable ist, sonder der Name der Adresse des Array.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.