Hallo,
gibt es ein Workaround Strings zu kopieren, ohne die Include-Datei "string.h" zu benutzen ?
Ich möchte den Inhalt von "string_a" nach "string_b" kopieren...
Danke im Vorraus.
void my_strcpy(char *dest, const char *src) {
while ((*dest++ = *src++));
}
ulrich hat geschrieben:dfx' ansatz ist nicht wirklich sicher: vergiß das '\0' am ende und die schleife läuft durch dein RAM, bis sie zufällig ein 0-byte findet, oder das programm mit einer zugriffsverletzung abstürzt.
@dfx: zumindest in VS.net ist strcpy in string.h bzw. cstring, nicht in stdlib.h bzw. cstdlib
dfx hat geschrieben:wenn du einen kaputten string kopierst, _soll_ das programm möglichst crashen.
dfx hat geschrieben:das strcpy() der c lib verhält sich genauso, weil das per definition die funktionsweise von strcpy() ist. einen derartigen fehler anders abzufangen ist außerdem gar nicht möglich.
dfx hat geschrieben:was ich gemeint habe: du kannst strcpy() bzw. jede andere funktion einer library verwenden, ohne den entsprechenden header zu includen. in den headern sind ja nur die prototypen deklariert
ulrich hat geschrieben:dfx hat geschrieben:wenn du einen kaputten string kopierst, _soll_ das programm möglichst crashen.
eigentlich nicht, zumindest nicht, wenn die entwicklung abgeschlossen ist. außerdem: stichwort buffer overflow attacke.
dfx hat geschrieben:das strcpy() der c lib verhält sich genauso, weil das per definition die funktionsweise von strcpy() ist. einen derartigen fehler anders abzufangen ist außerdem gar nicht möglich.
doch, indem du vorher festlegst, wie lang dein string maximal sein darf, dann darauf achtest, daß die char[] deines quell- und zielstrings wirklich so groß sind und schließlich strncpy (mit 'n') verwendest.
ja, natürlich kannst du deine eigenen vorwärtsdeklarationen schreiben, aber was wäre ein grund dafür?
dfx hat geschrieben:ulrich hat geschrieben:dfx hat geschrieben:wenn du einen kaputten string kopierst, _soll_ das programm möglichst crashen.
eigentlich nicht, zumindest nicht, wenn die entwicklung abgeschlossen ist. außerdem: stichwort buffer overflow attacke.
das hat mit buffer overflows nix zu tun. du hast gesagt, wenn im quellstring die terminierende null fehlt. wenn das vorkommt, ist das ein definitiver programmierfehler (fehler des programmierers!), der in einem fertigen programm ("wenn die entwicklung abgeschlossen ist") nie auftreten darf. falls er doch auftritt, tätest du besser daran, das programm sauber crashen zu lassen (damit du auf den fehler draufkommst), anstatt den fehler irgendwie verschleiern zu versuchen.
dfx hat geschrieben:dfx hat geschrieben:das strcpy() der c lib verhält sich genauso, weil das per definition die funktionsweise von strcpy() ist. einen derartigen fehler anders abzufangen ist außerdem gar nicht möglich.
doch, indem du vorher festlegst, wie lang dein string maximal sein darf, dann darauf achtest, daß die char[] deines quell- und zielstrings wirklich so groß sind und schließlich strncpy (mit 'n') verwendest.
das betrifft nur das überschreiben des zielpuffers. wie schon gesagt ist eine fehlende null im _quell_puffer ein ganz anderer fehler. die maximale länge des quellpuffers braucht nicht angegeben zu werden, da diese durch die terminierende null bereits festgelegt ist. wenn diese fehlt, ist der fehler beim anlegen des quellstrings gemacht worden, und das ist (möglicherweise/wahrscheinlich) an einer ganz anderen stelle des programms passiert. durch strncoy() verhindest du zwar, daß du über den zielpuffer hinaus schreibst, du würdest aber immer noch _lesend_ über den quellpuffer hinausschiessen..
Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste