C++: Mehrere Character (char) in einen String speichern?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Hallo! Man kann es zb. mit einer for-Schleife machen.

char text[] = "Hallo";    /*Man kann es auch so schreiben, die Größe ist dann die länge der zeichen in unter "" */
char string[6];
int i;

for(i=0; i<5; i++) {
     string[i] = char[i];
}
string[i++] = "/0";    /* "/0" damit es ein String ist */

man kann einen String auch gleich festlegen indem man so schreibt:

string[] = "Text/0";

also mit /0

wenn man einen den ganzen String in einem anderen String kopieren möchte, kann man die Stringfunktion "strcpy" verwenden. Dies fügt dann am ende auch ein "/0" ein.

Das ist ein C Code, aber dieser Code sollte glaub ich auch in C++ funktionieren.

LG


Franz159  07.10.2015, 18:31

Danke für die HA-Auszeichnung! :)

0

Einfach so:

char arr[5] = {'H', 'a', 'l', 'l', 'o'};
string str(arr, 5); // oder sizeof(arr) anstatt 5


Siehe dazu:

http://www.cplusplus.com/reference/string/string/string/

Viel Spaß! :)


Tbexx  20.07.2015, 21:07

das array muss [6] sein! "\0" ist in jedem array am ende damit der compiler weiss das, dass Array am ende ist.

char arr[6] = {'H', 'a', 'l', 'l', 'o', '\0'};
0
TeeTier  20.07.2015, 21:10
@Tbexx

Nein, das ist leider falsch! :)

Meine Lösung ist zu 100% korrekt:

char arr[5] = {'H', 'a', 'l', 'l', 'o'};

(wobei man anstatt "arr[5]" natürlich auch "arr[]" schreiben kann ... oder anstelle eines Array einen Zeiger ... je nachdem wie man lustig ist und was die Anforderungen sind)

Es ist einfach nur ein char-Array mit 5 Elementen (nicht 6!) ... seit wann müssen char-Arrays mit einem Nullbyte terminiert werden?

Nicht alles was ein char-Array ist, ist auch gleichzeitig ein C-String!

0
Tbexx  20.07.2015, 21:13
@TeeTier

upps doch 5^^ sind ja 6 plätze. beginnt ja bei 0 nicht 1, wie bei der bestimmung der länge des Arrays

0
TeeTier  20.07.2015, 21:24
@Tbexx

Du verwechselst Char-Arrays mit C-Strings! :)

C-Strings sind mit einem Nullbyte terminerte Char-Arrays, und Char-Arrays an sich erfordern keinerlei Endmarker!

char* s = "abc"; // 4 => 'a', 'b', 'c', '\0'
char a[] = {'a', 'b', 'c'}; // 3 => ohne '\0'
char *p = a; // 3 => ohne '\0'

Das Beispiel des Fragenstellers:

char arr[5] = {'H', 'a', 'l', 'l', 'o'};

... dabei enthält das Char-Array 5 Elemente von Index 0 bis Index 4 (inklusive) und ist nicht mit einem Null-Byte terminiert.

Würden wir hingegen das hier schreiben:

char *str = "Hallo";

... dabei enthält der Speicherbereich, auf den gezeigt wird, 6 Elemente von Index 0 bis Index 5 (inklusive), wobei das letzte Byte ein Nullbyte ist, und in obiger Definition nicht sichtbar ist.

0
martin7812  21.07.2015, 06:14
@TeeTier

Man kann sogar bei C (und natürlich C++) schreiben:

char test[3] = "abc";

Dann bekommt man zwar eine Warnmeldung vom Compiler, dass der entsprechende String nicht mit einem NUL-Zeichen beendet werden kann, aber das braucht einen ja nicht zu stören, wenn man kein NUL-Zeichen am Ende braucht.

1

Manche „Probleme“ kann man schlicht vermeiden, indem man erst einmal darüber nachdenkt, welche Daten man verarbeiten will.

Wenn du ein einzelnes „char“ verarbeiten willst, dann sollte es wirklich nur bei diesem einen „char“ bleiben. Alles andere sind dann gleich Zeichenketten, bzw. im Programmierjargon „Strings“ … :-)


Amago 
Beitragsersteller
 21.07.2015, 21:10

Ich war dabei mir einen eigenen kleinen passwort generator zu bauen. Alle zeichen (die chars) werden einzeln zufällig generiert und abgespeichert. Aber wie kann ich des array chars Zeichen[10]... einen String passwort machen.?
Hat sich inzwischen aber eh schon erledigt..

0
wolfgang1956  22.07.2015, 06:06
@Amago

Man könnte einen Stringpuffer verwenden, der wartet solange auf Eingaben, bis mit der Eingabetaste die Eingaben abgeschlossen werden. … :-)

0