C++ - kopieren von const char* nach char*
Habe ich eine Funktion
ClassA::FuncA(const char *filePath)
wollen und kopieren Sie diese const char string* char*!
Meine Lösung:
char *argv[2];
int length = strlen(filePath);
argv[1] = new char(length +1);
strncpy(argv[1], filePath, length);
nachdem dies habe ich in argv[1] den gewünschten chars sind aber auch einige andere Undefinierte chars!
filePath:
"C:\Users\userA\Parameter.xmlþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþKŸQyá•"
Was läuft hier falsch? Die Länge mit strlen ist OK!
InformationsquelleAutor leon22 | 2012-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwa so:
Version:
nur reserviert ein Einzelzimmer
char
und mit dem Wert initialisiert, es zulength+1
.argv[1] = new char[length+1]; strncpy(argv[1], filePath, length+1);
schneller sein könnte für große Längen?! In den meisten Fällen ist es nicht egal, denke ich.was?.
ich drückte enter für einen Zeilenumbruch ...naja funktioniert nicht in den Kommentaren, so dass mein Kommentar war unvollständig sichtbar für eine Sekunde. Sie sind zu schnell!
Seine Verwendung von
strncpy
ist auch falsch (aber die syntax Fehler in dernew
wurde gut erkannt).Du hast Recht! Ich habe die \0 in strncpy!
InformationsquelleAutor Luchian Grigore
Haben Sie zwei Probleme in deinem code:
Müssen Sie 1, um die Länge nach dem kopieren, um die Kopie null-Zeichen (strlen gibt nur die Anzahl der Zeichen ohne null-Zeichen; sehen Sie mehr hier). So code zu ändern:
strncpy(argv[1], "filePath", Länge + 1);
Müssen Sie festlegen, wie das array initialisiert wird, wie Sie die Initialisierung nur ein Zeichen (und nehmen wir an, Sie wollen die volle string kopiert werden). Also:
argv[1] = new char[length + 1]();
Hinweise:
InformationsquelleAutor Bo.
Das problem ist, dass Sie
strncpy
eher alsstrcpy
. Unddie Art und Weise, die Sie verwenden, ist es nicht kopieren Sie die Kündigung
\0
.In der Praxis, weil
strncpy
eine Zeichenfolge ohne\0
terminator, es ist am besten zu vermeiden. In deinem Fallstrcpy
allein ist fein, da hast du dir ja gerade selbst ein ausreichend großer Puffer. In dem Allgemeinen Fall, haben Sie möglicherweise die Verwendungstrlen
, um sicherzustellen, dass die Zeichenfolge, die Sie haben, passt in den Ziel-Puffer (ohne jemals zu vergessen, fügen Sie 1, um die Ergebnisse für die\0
).Wenn die situation Auftritt, eine Menge, möchten Sie vielleicht schreiben Sie Ihre eigene version
der
strncpy
, die arbeitet (d.h. Garantien, die eine Beendigung\0
, undnicht kopieren oder schreiben, mehr Zeichen als nötig). So etwas wie:
(Diese Funktion tatsächlich vorhanden ist, unter dem Namen
strcpy_s
in C 2011, aberes ist nicht allgemein umgesetzt; Microsoft hat es, aber ich habe es nicht gesehen
an anderer Stelle.)
InformationsquelleAutor James Kanze
strncpy()
Kopien nicht mehr alslength
Zeichen. Damit beenden\0
wurde nicht kopiert.InformationsquelleAutor mouviciel