simpelstes Programm - FEHLER Mehrfachinitialisierung
-
Hallo
int _tmain(int argc, _TCHAR* argv[]) { int a = 5, a = 4; }Weiss jemand von euch was an diesem einfachen Programm falsch ist?
Mir wird irgendwas von wegen Mehrfachinitialisierung ausgegeben obwohl ich a nur mit 5 initialisiere und danach den Wert von a auf 4 setze.Bin für jede Hilfe dankbar !
-
ähem, hinter "int a = 5" gehört ein Semikolon als Zeilenabschluss, kein Komma. Mit Komma ist es tatsächlich eine Mehrfachinitialisierung

-
Son Mist
Danke
-
int _tmain(int argc, _TCHAR* argv[]) { char* s = "hahaha"; s[0]=105; printf("%i\n",s[0]); scanf("%s",s); }Weißt du zufällig auch warum ich hier eine Zugriffsverletzung in der Zeile
s[0]=105;bekomme?
Legt C "Strings" bzw char* in den konstanten Speicher?Danke nochmal !
-
Zufall, ist undefiniert.

-
Verstehe ich nicht ganz

Ich greife ja sozusagen auf das erste "h" des von mir angelegten Strings "s" zu und diese Stelle müsste mir doch eigentlich Betriebssystem-Rechtlich zugesprochen sein (lesend und schreibend) oder?
-
computer says no
Nein. Du darfst nur lesend darauf zugreifen. Darum empfiehlt es sich auch, "s" als const zu markieren, sprich:
char const* s = "hahaha";
-
Danke für deine Hilfe, ist das eine Eigenart von den C-Strings?
-
Es ist eine Eigenart von Stringliteralen.
-
Jain. Solange du einem Zeiger ein Stringliteral zuweist, ist schreibender Zugriff verboten. Wenn du jedoch den String in ein Array kopierst, ist das erlaubt, z.B.:
char* s1 = "foo"; s[0] = 'z'; // kabumm char s2[] = "bar"; s2[0] = 'y'; // ok
-
Gut zu wissen, dachte beide von dir gezeigen Möglichkeite wären Äquivalent

Besten Dank !