C++ Alternativen memset, memcpy etc.



  • Hallo,

    und hier meine letzte Frage für heute. In einem meinen ersten Posts wurde ich daraufhingewiesen, dass memste und memcpy nicht wirklich C++ wären. Nun habe ich versucht, dass gleiche Ergebnis mit std::copy zu erreichen. Ist mir aber nicht gelungen.

    unsigned char* pArray = unsigned char[1024];
    memset(pArray, '0', 1024);
    
    unsigned char src[1024];
    memset(&src, '0', 1024);
    unsigned char* pDst = new unsigned char[1024];
    memcpy(pDst, &srck, 1024);
    

    Was für Möglichkeiten habe ich noch um Array zu initialisieren und zu kopieren?

    Gruß
    Markus



  • std::vector <char> myCharArray(1024, '0');
    


  • wenn du wirklich mit char arrays arbeitest ist an memcpy/memset nix auszusetzen. beide funktionen sind standard C++ und bei char arrays IMO wirklich nicht unangebracht.



  • Don06 schrieb:

    std::vector <char> myCharArray(1024, '0');
    

    😃

    #include <algorithm>
    #include <iostream>
    
    int main( ) {
    
    	unsigned char buffer[ 80 ] = { };
    
    	std::cout << buffer << std::endl;
    
    	const char text[ ] = "Hello, C++!\n";
    	std::copy( text, text + sizeof( text ), buffer );
    
    	std::cout << buffer << std::endl;
    }
    

    greetz, Swordfish


  • Mod

    hustbaer schrieb:

    wenn du wirklich mit char arrays arbeitest ist an memcpy/memset nix auszusetzen. beide funktionen sind standard C++ und bei char arrays IMO wirklich nicht unangebracht.

    Da stimme ich zu. Man kann noch etwas differenzieren entsprechend der Semantik einer Operation:
    char-Arrays dienen häufig nur dazu, rohen Speicher zu repräsentieren, in solchen Fällen bieten sich memcpy&co an, denn diese kümmern sich auch nicht darum, welche Art von Objekten tatsächlich in diesem Speicher existiert. Haben wir es aber beispielsweise mit einem String zu tun, also einer Sequenz von einzelnen Zeichen, dann ist es ja eigentlich nur Zufall, dass der Typ dieser Zeichen mit dem Typ, den wir zur Darstellung von rohem Speicher benutzen, übereinstimmt. In so einem Falle empfehle ich Standardalgorithmen, denn die Manipulation von Zeichenketten befindet sich konzeptionell auf einem höheren Level als die rohen Speichers. Zwingend ist das natürlich nicht, es folgt in etwa der gleichen Logik, die bei der Wahl zwischen struct und class angewandt wird, um zwischen einfachen Datenansammlungen und richtig gekapselten Typen mit eigenen Operationen zu unterscheiden.

    die entsprechenden Äquivalenzen (bezogen auch char) bestehen grob zwischen:
    memcpy/memmove - copy/copy_backward
    memset - fill/fill_n



  • Aber was ich mich trotzdem Frage ... warum füllst du mit '0' und nicht mit '\0' (bzw. 0)? 😃


Anmelden zum Antworten