Frage zu Zeiger
-
Hallo
#include <stdio.h> int main () { char var[] = "333"; char *buff[10]; char * zgr ; int i; zgr = buff; for ( i=0 ; i<3; i++ ) { *(zgr++) = var[i]; } printf("%s\n",buff); // Ausgabe: 3332 <-- Wieso ? o_O system("PAUSE"); }
#include <stdio.h> char var[] = "333"; int main () { char *buff[10]; char * zgr ; int i; zgr = buff; for ( i=0 ; i<3; i++ ) { *(zgr++) = var[i]; } printf("%s\n",buff); // Ausgabe: 333 <-- Wieso nicht auch 3332 system("PAUSE"); }
-
Du solltest buf nullinitialisieren ("char buf[10]={0}").
-
Achso ok ty funktioniert.
-
na ja, ist aber nicht "schön". mit
char *buff[10];
definierst du ein array von char pointern, d.h. 10*4 byte, die eigentlich fuer Adressen bestimmt sind, in die du dann einfach den string "333" reinhaust.
also besser den * weglassen, damit definierst du einfach 10 bytes, die du dann beliebig ueberschreiben kannst...
-
kermitaner schrieb:
na ja, ist aber nicht "schön". mit
char *buff[10];
definierst du ein array von char pointern, d.h. 10*4 byte, die eigentlich fuer Adressen bestimmt sind, in die du dann einfach den string "333" reinhaust.
stimmt, war mir gar nicht aufgefallen...
-
hab mal etwas "experimentiert" u. bin dann auf das phänomen gestossen:
#include <stdio.h> int main (){ char var[] = "1234"; char* buff[10]; char *zgr ; int i; zgr = buff; buff[1]="hugo"; printf("%s\n",buff[1]); // "hugo" ! for ( i=0 ; i<sizeof(var); i++ ) *(zgr++) = var[i]; printf("%s\n",buff); //1234 ! printf("%s\n",buff[1]); // wieso jetzt auch 1234 ?? system("PAUSE"); }
da musste ich schon zum debugger greifen, um zu kapieren, warum beim letzten printf auf einmal auch 1234 rauskam