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 😉


Anmelden zum Antworten