So kopieren oder verketten Sie zwei char*
Wie Sie verketten oder kopieren char* zusammen?
char* totalLine;
const char* line1 = "hello";
const char* line2 = "world";
strcpy(totalLine,line1);
strcat(totalLine,line2);
Dieser code erzeugt einen Fehler!
segmentation fault
Ich würde vermuten, dass ich brauchen würde, um Speicher zu totalLine?
Ist eine andere Frage, die die folgenden Speicher kopieren oder Daten kopieren?
char* totalLine;
const char* line1 = "hello";
totalLine = line1;
Vielen Dank im Voraus! 🙂
Ändern Sie einfach
Sie konnte immer stecken Sie in die low-und high-order Byte of a kurz 😉
Warum bist du nicht mit
char* totalLine
zu char totalLine[12]
(obwohl denken Sie daran, Ihre code ist C und nicht C++)Sie konnte immer stecken Sie in die low-und high-order Byte of a kurz 😉
Warum bist du nicht mit
std::string
? Es auf Magische Weise löst alle Probleme.InformationsquelleAutor mister | 2012-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie Ahnen richtig.
totalLine
ist eine nicht initialisierte Zeiger, so dass diesestrcpy
Anrufe sind zu schreiben versucht, um irgendwo zufällig im Speicher.Glücklicherweise, wie Sie markiert haben diese C++, brauchen Sie nicht zu stören. Einfach dies tun:
Kein memory-management erforderlich.
Ich denke du meinst "ist der zugrunde liegende string kopiert, oder nur die Zeiger?". Wenn ja, dann einfach den Zeiger.
std::string
hat einen Konstruktor vonchar *
, einfach.Mit Verweis auf den link, was ist, wenn ich nicht weiß, wie groß der text? dann wie ich es in einen string konvertieren?
Sie brauchen nicht zu wissen, die Größe.
const char *foo = "whatever"; std::string bar = foo;
sollte gut funktionieren.Sie sollten wahrscheinlich nicht mit strtok(). Sollten Sie eine weitere Frage stellen, wie Sie zu erreichen ist die Aufgabe, die Sie tun, in C++ (wie Sie offensichtlich schreiben C nicht C++).
InformationsquelleAutor Oliver Charlesworth
Ja, Sie brauchen, um Speicher zu
totalLine
. Dies ist ein Weg, es zu tun; es geschieht, um meine empfohlenen Weg, es zu tun, aber es gibt viele andere Möglichkeiten, die genauso gut sind.[EDIT: ich schrieb diese Antwort vorausgesetzt, dies war eine C-Frage. In C++, als Oli empfiehlt, verwenden Sie einfach
std::string
. ]strcpy
undstrcat
?Ich denke, fordern
strlen
vorne, dannmemcpy
mit der gleichen Länge variable(N) inmalloc
, macht es übersichtlicher für zukünftige Leser von meinem code, dass es keine Möglichkeit zu einem Pufferüberlauf. Auch spielt es keine Rolle, in diesem Fall, aber wenn es N strings zu verketten, mitstrcat
würde die operation, die in O(N2).InformationsquelleAutor zwol