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
aaaaProgram 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);