memcpy



  • int len = 8;
    char str1[]="abcdefg";
    char str2[40];
    
    memcpy (str2+len,str1,strlen(str1)+1);
    cout<<str2<<endl;
    

    Was passiert hier genau: str2+len

    Sowas ähnliches habe ich gestern irgendwo im Internet gesehen.



  • Da str2 ein Array von char ist, gilt str2 ohne Indizierung als Zeiger auf das erste Arrayelement (Element mit Index 0). str2 + x ist nun ein Zeiger auf das x+1te Element (Element mit Index x).



  • kopierer schrieb:

    Was passiert hier genau: str2+len

    str2 ist ein Array. Wenn man in C mit einem Array "irgendwas" macht, dann zerfällt der Name des Arrays häufig in einen Pointer auf sein erstes Element. Du machst hier "irgendwas", du addierst nämlich len hinzu. Also bekommst du <pointer auf erstes Element v+n str2> + len .

    Kannst du damit was anfangen?

    Falls nicht helfen dir die ersten Seiten des Abschnitts über Pointerarithmetik im Einsteigerbuch deiner Wahl sicherlich weiter.

    PS: abgesehen von der Konsolenausgabe ist das reine C-Frickelei, in C++ würde man vermutlich* auf C++-Strings zurückgreifen.

    ______________________
    * vermutlich bedeutet in dem Fall, dass man ausnahmsweise C-String-Gefrickel benutzt, wenn man

    a) Durch Profiling festgestellt hat, dass das schneller ist und Geschwindigkeit an der Stelle entscheidend ist (guter Grund, aber unwahrscheinlich)
    b) Der Meinung ist, das müsste schneller sein, auch wenns nicht ins Gewicht fällt (Premature optimization, kein guter Grund)
    c) Aus anderen Gründen Abneigungen und/oder Vorurteile gegen std::string hat und sich lieber auf die Risiken mit C-Array-Gefrickel einlässt (häufig kein guter Grund)
    d) Irgendwann anfang der 90er stehen geblieben ist und deshalb keine Ahnung hat oder sich nicht mit so "neumodischem" Krams wie std::string beschäftigen will. C-Strings funktionieren schließlich schon seit einigen Jahrzehnten (ganz sicher kein guter Grund)
    a)


Anmelden zum Antworten