strcat Segmentation fault



  • Also ich möchte b mit sich selbst verlängern.
    Doch irgendwie erzeugt das folgende Programm Buffer Overflows .
    GDB sagt sie sind in strcat .
    Ausgabe:

    Bitte zu Verschlüsselnden Text eingeben
    d
    Bitte key eingeben
    a
    aa
    aaaa

    Program received signal SIGSEGV, Segmentation fault.
    0x006579cd in strcat ()

    int encrypted[400];
    char a[400],b[400];
    
    int i;
    int zufall;
    
    cout<<"Bitte zu Verschlüsselnden Text eingeben"<<endl;
    
      cin.getline (a,256);
    
    cout<<"Bitte key eingeben"<<endl;
      cin.getline (b,256);
    
    for(i=1;i<10;i++)
    {
    strcat(b,b);
    
    cout<<b<<endl;
    }
    

    Müsste doch eigentlich genug Platz sein oder?
    Hoffe jemand kann mir helfen .
    Danke



  • Das Verhalten von strcat ist undefiniert, wenn Quell- und Zielbereich überlappen.



  • evtl mal mit memmove() - wird allerdings die Quelle veraendert, aber immerhin ist das ergebnis definiert. Generell is strncat() besser als strcat(), weil Du damit gezielt die max Laenge bestimmen kannst.



  • RobertM schrieb:

    Also ich möchte b mit sich selbst verlängern.

    hya ! 🕶

    nimm nen zweiten puffer:

    char buf[1024]={0};
    	 char* p = " kuckuck ";
    
    	 int i;
    	 for (i=0; i<1000000; i++)
    	 {
    		if ( (strlen(buf) + strlen(p)) > (sizeof(buf) -1))
    			break;
    		strcat(buf,p);
    	 }
    
    	 puts(buf);
    

Anmelden zum Antworten