strcmp mit "statischem String" erlaubt?
-
Hallo,
geht sowas immer gut oder nur zufällig auf meiner Plattform?
strcmp(pointer, "statisch")
"statisch" wird ja zu einem char* - Array. Aber das ist ja nur lokal gültig. Kann ich davon ausgehen, dass der obige Code immer funktioniert?
Lg
FREAAAAAAK
-
Das funktioniert immer.
Aber "statisch" ist ein Stringliteral und kein char*-Array.An strcmp wird die Adresse übergeben an der das Stringliteral im Speicher steht. Und das ist ein char-Pointer (char*). Kein Array.
Und du kannst auch
strcmp("dynamisch", "statisch");
machen, da strcmp an den Strings nichts ändert.
-
soweit ich weiß landet ein Stringliteral, das irgendwo im Code auftaucht "Hallo ich bin ein Literal", im statischen Speicher. Das Literal liefert dir die Adresse, wo du es im Speicher findest.
Also char* ptr="Hallo"; holt dir die Speicheradresse des Textes.Da es statisch ist, ist sogar sowas sicher:
void foo()
{
return "Hallo";
}...
int main()
{
...
char* text=foo();
machwasMitText(text);
...
}
-
Ok, danke!
Und wo wir schon dabei sind
Kann ich davon ausgehen, dass char* c[50]; alle 50 Elemente mit NULL initialisiert oder muss ich das manuell machen? Falls ja, wie? Einfach in einer Schleife oder gibt es da was fertiges?
-
Nein.
Nur globale und static Variablen werden automatisch initialisiert.char* c[50] = {NULL};
Wenn du nicht alle Werte initialisierst, wird der Rest mit 0 initialisiert.
-
Cool, den Trick mit der Initialisierung von nur einem Wert kannte ich nicht. Vielen Dank!
-
DirkB schrieb:
Nein.
Nur globale und static Variablen werden automatisch initialisiert.char* c[50] = {NULL};
Wenn du nicht alle Werte initialisierst, wird der Rest mit 0 initialisiert.
Eher
char* c[50] = {0};
-
Ethon schrieb:
Eher
char* c[50] = {0};
Das hatte ich auch schon geschrieben (und gelöscht - es ist gut, Moderator zu sein
), dann habe ich es gesehen: Er hat ja ein Array von Zeigern, also ist NULL schon richtig.
-
Ethon schrieb:
Eher
char* c[50] = {0};
In C ist 0 im Zeigerkontext äquivalent zu NULL, das ist per Standard so, da NULL als integer Konstante mit Wert 0 beschrieben ist. Umgekehrt gilt dies natürlich auch:
char c = NULL;
macht also auch keine Schwierigkeiten.