C++ - Wie hängen Sie einen char zu char*?
Ich habe versucht, so dürfen die Möglichkeiten auf dem Internet für das Anhängen eines Zeichens in eine char*, aber keiner von Ihnen scheint zu funktionieren. Hier ist einer meiner unvollständige Lösung:
char* appendCharToCharArray(char * array, char a)
{
char* ret = "";
if (array!="")
{
char * ret = new char[strlen(array) + 1 + 1]; //+ 1 char + 1 for null;
strcpy(ret,array);
}
else
{
ret = new char[2];
strcpy(ret,array);
}
ret[strlen(array)] = a; //(1)
ret[strlen(array)+1] = '\0';
return ret;
}
Dies funktioniert nur, wenn das übergebene array ist "" (leer innen). Sonst wird es nicht hilft (und bekam eine Fehlermeldung an (1)). Könnte Ihr Jungs mir bitte helfen mit diesem ? Vielen Dank im advanced !
- Sie können nicht fügen Sie ein
char
zu einemchar*
; Sie sind zwei sehr unterschiedliche Typen. Sie können fügen Sie einenchar
zu den array, die einechar*
Punkte zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entfernen Sie diese
char * ret
Angaben inif
Blöcke, die das verbergen äußerenret
. Dafür ist die memory-leak-und auf der anderen Seite, nicht zugewiesenen Speicher fürret
.Vergleich einer c-Zeichenkette, die Sie verwenden sollten
strcmp(array,"")
nichtarray!=""
. Ihre Letzte code sieht wie folgt aus:Beachten Sie, dass, müssen Sie behandeln den Speicher zurückgegeben
ret
irgendwodelete[]
es.Warum Sie nicht verwenden
std::string
? es hat.append
Methode, um fügen Sie ein Zeichen am Ende einer Zeichenkette:delete[]
die neue würde-variable, wenn Sie Sie nicht mehr brauchen. Oder besser verwendenstd::string
.Den Namen der Funktion, spiegeln nicht die Semantik der Funktion. In der Tat müssen Sie nicht fügen Sie einen Charakter. Erstellen Sie ein neues Zeichen-array enthält die original-array plus die angegebenen Zeichen. Also, wenn Sie tatsächlich eine Funktion benötigen, die fügt ein Zeichen ein Zeichen-array, das ich schreiben würde es auf folgende Weise
Wenn Sie eine Funktion benötigen, enthalten eine Kopie der original-array plus die angegebenen Zeichen dann könnte es ein Blick auf die folgende Weise
Das problem ist, dass Sie deklarieren eine neue variable anstelle von zuweisen zu einem bestehenden:
werden, und versucht zu vergleichen von string-Werten durch Vergleich der Zeiger:
obwohl es keine Notwendigkeit zu machen, dass ein Vergleich überhaupt; der erste Zweig wird das richtige tun oder nicht, ob der string leer ist.
Das eher Allgemeine problem ist, dass Sie Herumspielen mit fiesen, fehleranfällig C-Stil-string manipulation in C++. Verwenden
std::string
und es wird die Verwaltung der Speicherzuweisung für Sie:AUSGABE: