std::char_traits::copy



  • Hi,

    ich möchte von einem char* in einen anderen char* kopieren, und zwar mittels copy ( static char_type copy( char_type* dest, const char_type* src, std::size_t count );*
    http://en.cppreference.com/w/cpp/string/char_traits/copy ). Aber was ich habe, akzeptiert er nicht:

    int main(int argc, const char *argv[])
    {
    	const char* INPUTFILE;
    	const char* INPUTFILE_DATABASE;
    	const char* OUTPUTFILE;
    
    	static const char* copy(INPUTFILE, argv[1], argv[1]);
    	static const char* copy(INPUTFILE_DATABASE, argv[2], argv[2]);
    	static const char* copy(OUTPUTFILE, argv[3], argv[3]);
    	return 1;
    }
    

    Was stimmt denn nicht ? Muss ich size_t noch explizit angeben ?

    Danke und Gruß!



  • Aha, er akzeptiert nicht. Tut er das schweigend?



  • Hallo,

    mehrere Dinge:
    1. Lies dir auf der von dir gelinkten Seite die Erklärung zu den Parametern dieser Funktion durch. Dann wirst du erkennen, dass dest auf reservierten Speicher zeigen muss und dass count die Länge des Strings ist. Den Speicher reservieren kannst du mit std::vector (und dann mit v.data() oder mit &v.front() darauf zugreifen) oder ab C++17 mit std::string und s.data() . Die Länge kannst du im Übrigen mit std::char_traits::length ermitteln.
    2. static const char* copy(INPUTFILE, argv[1], argv[1]); ist nicht die Grammatik, mit der man Funktionen aufruft. Ein grammatischer Aufruf sähe so aus: copy(INPUTFILE, argv[1], argv[1]); (die Argumente stimmen jedoch nicht!). Den Rückgabewert kannst du hier außerdem getrost ignorieren, wie du bestimmt auch aus der Dokumentation entnommen hast. 😉
    3. Wenn das Programm korrekt beendet wurde, sollst du entweder 0 oder EXIT_SUCCESS zurückgeben. 1 kennzeichnet oft einen Fehlerfall.

    Grüße



  • manni66 schrieb:

    Aha, er akzeptiert nicht. Tut er das schweigend?

    😃 🤡
    Mea culpa, hätte ich wohl tatsächlich noch anführen sollen.

    Fytch schrieb:

    Hallo,

    mehrere Dinge:
    1. Lies dir auf der von dir gelinkten Seite die Erklärung zu den Parametern dieser Funktion durch. Dann wirst du erkennen, dass dest auf reservierten Speicher zeigen muss und dass count die Länge des Strings ist. Den Speicher reservieren kannst du mit std::vector (und dann mit v.data() oder mit &v.front() darauf zugreifen) oder ab C++17 mit std::string und s.data() . Die Länge kannst du im Übrigen mit std::char_traits::length ermitteln.
    2. static const char* copy(INPUTFILE, argv[1], argv[1]); ist nicht die Grammatik, mit der man Funktionen aufruft. Ein grammatischer Aufruf sähe so aus: copy(INPUTFILE, argv[1], argv[1]); (die Argumente stimmen jedoch nicht!). Den Rückgabewert kannst du hier außerdem getrost ignorieren, wie du bestimmt auch aus der Dokumentation entnommen hast. 😉
    3. Wenn das Programm korrekt beendet wurde, sollst du entweder 0 oder EXIT_SUCCESS zurückgeben. 1 kennzeichnet oft einen Fehlerfall.

    Grüße

    Danke! Ich werde mich daran mal orientieren und mich bestimmt wieder melden 🙂


Anmelden zum Antworten