• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

strncpy-Bug

Ungefähr schon. Du solltest nach den Fehlerausgaben die Bearbeitung abbrechen (ziel + startposition kann ungültig sein).

Wenn du einfach nur den Zielstring abschneiden willst, würd' ich folgendes vorschlagen:
Code:
if (startposition > strlen(ziel) )
{
puts("funzt nicht startposition > strlen(ziel)");
}
else
{
   if (laenge > 0)
   {
      strncpy(&ziel[startposition], quell, laenge);
      if (ziel[startposition + laenge - 1] != '\0')
      {
          puts("Zielstring abgeschnitten");
          ziel[startposition + laenge - 1] = '\0';
      }
   }
   else { /* nichts zu tun */ }
}
 
Jo, danke, die werde ich mal in meine wort.h kopieren.


Anbei mal der Pfad zu meiner String.lib:

http://www.manfred-zahlhaas.de/sources/prog/c/lib/wort.h

Kritik durchaus erwünscht. ;-)
 
mampfi schrieb:
Jo, danke, die werde ich mal in meine wort.h kopieren.


Anbei mal der Pfad zu meiner String.lib:

http://www.manfred-zahlhaas.de/sources/prog/c/lib/wort.h

Kritik durchaus erwünscht. ;-)
Code:
int string_in(char *s, char *part) {
 return (!strstr(s, part)==0) ;
}
Was ist dass denn für ne (igitt)-Kondition, kannst du nicht einfach strstr(a,b) != NULL schreiben. Achja, NULL statt 0, weil strstr nen Pointer zurückgibt!
Code:
void left(char s[256], int p)
Die 256 taugen nicht viel, und verhindern nichts. Äquivalent zu *s oder s[].
Zu Overflows äußere ich micht nicht.
Und sonst werbe ich erstmal für libHX die einige derer schon enthält :-D
 
Weil wir schon grad beim ratschen (plaudern) waren, hab ich die wort.h gleich mal mit reingenommen.

Der char[256] ist mir gleich nach dem Posting selbst brutal ins Auge gesprungen.

Nun, ich muss zugeben, die Lib ist uralt.

Overflow? Hab ich da aus Versehen ein paar potentielle Exploits eingebaut?
 
Oben