STRCPY macht was genau?



  • Ein string ist ein Feld vom Typ char.
    Wenn du nur den Variablennamen einer anderen Variablen zuweist, übergibst du die Anfangsadresse von der Variablen.

    Also gibst Du die Anfangsadr src und dest an, den Rest erledigt das \0



  • also um es nochmal zu verdeutlichen,
    wenn ich strcpy(kette1,kette2) schreibe, wird praktisch zur adresse der ersten stelle von kette 2 gegangen, alles kopiert bis zur ersten \0, und komplett in kette1 reingeschrieben. richtig???



  • @Bunti sachlich richtig

    Simpleste Implementierung zur Verdeutlichung

    int Doofes_StrCopy(char *in,char* out)
    {
     int i;
     int len=strlen(in);
     for(i=0;i<=len;i++)
       out[i]=in[i]
     return 0;
    }
    

    😋 Und bevor irgendeiner anfängt darüber zu diskutieren wieviel Probleme diese Implementierung macht
    es ist nur ein simples Beispiel.

    🙂 Korrektur 1 for Schleife von < nach <= geändert
    🙂 Korrektur 2 doppeltes strlen entfernt



  • Und bevor irgendeiner anfängt darüber zu diskutieren wieviel Probleme diese Implementierung macht

    das nicht aber wir haben das nullbyte am ende vergessen 😃



  • @WINDALF Gracias auch für das wir 🙂 🙂

    wird korrigiert

    🙄 kommt davon falls ich es schreiben müßte, würde das ganze mit Pointern in einem while verschwinden.
    beziehungsweise bei embedded Systemen in Assembler implementiert



  • kommt davon falls ich es schreiben müßte, würde das ganze mit Pointern in einem while verschwinden.
    beziehungsweise bei embedded Systemen in Assembler implementiert

    oben hab ich doch die stroustrup-variante hingeschrieben... würdest du das ganz anders machen oder wie meinst du das jetzt?



  • Hallo,

    @PAD & @Windalf:

    PAD's Version ist zwar doof (schreibt er ja selber, keine Beleidigung von mir, außerdem sehe ich doppelt hier

    int len=strlen(in);
     len=strlen(in);
    

    und das liegt nicht am heutigen Tag oder meinem Zustand 🙂 )

    aber es ist korrekt, das Null-Byte wird selbstverständlich erfaßt, man beachte die for-Bedingung:

    [cpp]
    for(i=0;i<=len;i++)
    [/cpp]

    auch wenn das (vielleicht?) nicht beabsichtigt war...manchmal können scheinbare "Fehler" auch richtig sein 😉

    MfG



  • @Probe-Nutzer
    er hatt vorher ausversehen (was vermutlich auch an übermässigen alkeholkonsum lag) erst nur < statt <= geschrieben und hats dann nachträglich editiert... so wie es jetzt da steht stimmt es also, musst dir also keine sorgen machen 😉



  • na dann bin ich aber beruhigt jetzt, und jetzt weiß ich auch, warum die Edit-Funktion so tückisch sein kann, wenn man nicht auf die letzte Zeile "bearbeitet von" achtet (worauf ich sonst eigentlich immer achte und mich zurückhalte, so daß dieser Tag wohl doch nicht spurlos an mir vorbeigegangen ist 🙄 ). Aber ich sehe jetzt wenigstens nicht mehr doppelt, so daß mein Beitrag doch etwas Nützliches beigetragen hat. 🙂

    MfG



  • das eine kleine funktion so kompliziert sein kann O_o 😉


Anmelden zum Antworten