strncpy

02/06/2011 - 15:31 von Stefan Becker | Report spam
Hallo zusammen,

ich muss/darf mich etwas in C beschàftigen. Ich soll eine Datenübertragung
über einen Socket programmieren. Nun habe ich mir gedacht, ich übermittel in
jedem Packet den zugehörigen Dateinamen, diesen versuche ich gerade
herauszufiltern, leider bekomme ich bei strncpy immer einen Buffer Overflow,
ich verstehe aber nicht wieso:

else if (strncmp(buffer, "send:", 4) == 0) {
printf("Datenversand erkannt");
int namen_grenze = 0;
namen_grenze = strcspn( buffer, "&&" );// Hier wird der Dateiname gefunden
printf("Lànge der Zeichenkette: %d", namen_grenze);
char* dateiname = "default";
strncpy(dateiname, buffer, namen_grenze);//Ausschneiden des Dateinamens
//dateiname[namen_grenze] = "\0";
printf("%s", dateiname);
}

Beim strncpy hakt es dann immer aus, hat jemand eine Idee wo mein Fehler
liegt?!

Danke

Stefan
 

Lesen sie die antworten

#1 Alexander Bartolich
02/06/2011 - 15:40 | Warnen spam
Stefan Becker schrieb:
[...]
else if (strncmp(buffer, "send:", 4) == 0) {


^
Die Zeichenkette "send:" besteht aus 5 Zeichen.

printf("Datenversand erkannt");
int namen_grenze = 0;
namen_grenze = strcspn( buffer, "&&" );// Hier wird der Dateiname gefunden



buffer zeigt auf einen Speicherbereich, der mit "send" beginnt.

printf("Lànge der Zeichenkette: %d", namen_grenze);
char* dateiname = "default";



dateiname zeigt auf einen Speicherbereit, der 9 Byte groß ist, und
bei manchen Implementierungen nicht beschreibbar ist.

strncpy(dateiname, buffer, namen_grenze);//Ausschneiden des Dateinamens



Das wird bei manchen Implementierungen bereits beim ersten kopierten
Byte knallen. Ist namen_grenze größer als 8 kriegst du überall Probleme.

//dateiname[namen_grenze] = "\0";
printf("%s", dateiname);
}

Beim strncpy hakt es dann immer aus, hat jemand eine Idee wo mein Fehler
liegt?!



*censored*

Ähnliche fragen