Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?
-
Meine Bemühungen
Genau
Also soll ich das char durch ein string ersetzen oder muss ich das Programm jetzt komplett neu schreiben?
wort sollte ein std::string sein. Anhängen wäre dann
wort += b;
. Fertig!
Aber vermutlich lernst du erst C, später dann C++. YAIT eben.Vermutlich ist dein Lehrer YAIT (yet another incompetent teacher)
Eigentlich ist es ein Prof^^´
Das macht es nicht besser.
-
Das wäre zwar korrektes C++, aber nicht im Sinne des Aufgabenstellers, der lieber C mit cout sehe möchte. Was hier im Sinne der Aufgabenstellung gemacht werden müsste:
- Den Buchstaben an der Position
stringlength(wort)
setzen. Das hast du schon. - Danach ein Nullzeichen
'\0'
an der Positionstringlength(wort) + 1
setzen. Das fehlt noch.
Wie manni66 schon sagte, hast du damit (ziemlich schlechtes) C gelernt, aber immerhin bekommst du so die Punkte für die Hausaufgabe. Falls du richtiges C++ lernen möchtest, schau mal in die Linkliste für Neulinge hier im Forum. "Richtiges" C++ ist ziemlich anders als das, was du bisher gelernt hast.
- Den Buchstaben an der Position
-
@seppj sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
- Den Buchstaben an der Position
stringlength(wort)
setzen. Das hast du schon. - Danach ein Nullzeichen
'\0'
an der Positionstringlength(wort) + 1
setzen. Das fehlt noch.
In der Reihenfolge wird es nicht funktionieren, da stringlength keinen gültigen Wert ermitteln kann. Die einfachste Lösung wäre wohl
char wort[50] = {};
am Anfang des Programms.
- Den Buchstaben an der Position
-
@manni66 sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
In der Reihenfolge wird es nicht funktionieren, da stringlength keinen gültigen Wert ermitteln kann.
Nach erfolgreichem
cin >> wort;
istwort
Nullterminiert.
-
@swordfish sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
@manni66 sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
In der Reihenfolge wird es nicht funktionieren, da stringlength keinen gültigen Wert ermitteln kann.
Nach erfolgreichem
cin >> wort;
istwort
Nullterminiert.Nach
wort[stringlength(wort)] = b;
nicht mehr.
-
@seppj sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
Das wäre zwar korrektes C++, aber nicht im Sinne des Aufgabenstellers, der lieber C mit cout sehe möchte. Was hier im Sinne der Aufgabenstellung gemacht werden müsste:
- Den Buchstaben an der Position
stringlength(wort)
setzen. Das hast du schon. - Danach ein Nullzeichen
'\0'
an der Positionstringlength(wort) + 1
setzen. Das fehlt noch.
Wo ist die Position "stringlength(wort)+1"? Das steht nirgendwo in meinem Code...
Wie manni66 schon sagte, hast du damit (ziemlich schlechtes) C gelernt, aber immerhin bekommst du so die Punkte für die Hausaufgabe. Falls du richtiges C++ lernen möchtest, schau mal in die Linkliste für Neulinge hier im Forum. "Richtiges" C++ ist ziemlich anders als das, was du bisher gelernt hast.
Das werde ich tun
,
ich habe einige Probleme mit Programmierung und ja, wir haben die Vorlesung "Grundlagen der Programmierung" und das Grundpraktikum Programmierung gleichzeitig ...das ist für jemanden
,der ein totaler Anfänger ist, so, als würde man ins tiefe kalte Wasser geworfen werden, ohne schwimmen zu können...
- Den Buchstaben an der Position
-
@manni66 sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
Nach wort[stringlength(wort)] = b; nicht mehr.
Dann wird man sich den Wert von
stringlength(wort)
wohl merken müssen.
-
In der Reihenfolge wird es nicht funktionieren, da stringlength keinen gültigen Wert ermitteln kann. Die einfachste Lösung wäre wohl
char wort[50] = {};
am Anfang des Programms.Vielen vielen Dank, ich habe es gerade so eingesetzt mit char wort[50] = {} , ganz am Anfang und es funktioniert.
Vielen Vielen Dank
-
@swordfish sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
@manni66 sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
Nach wort[stringlength(wort)] = b; nicht mehr.
Dann wird man sich den Wert von
stringlength(wort)
wohl merken müssen.Klar. Wenn man verstanden hat, was hier nicht funktioniert. Deswegen ja auch meine Frage nach den Bemühungen.
-
@noskynet sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
- Danach ein Nullzeichen
'\0'
an der Positionstringlength(wort) + 1
setzen. Das fehlt noch.
Wo ist die Position "stringlength(wort)+1"? Das steht nirgendwo in meinem Code...
Deswegen steht da ja auch Das fehlt noch.
- Danach ein Nullzeichen
-
@noskynet sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
Vielen vielen Dank, ich habe es gerade so eingesetzt mit char wort[50] = {} , ganz am Anfang und es funktioniert.
Du hast das Problem nicht begriffen
Erweitere dein Programm so, dass nochmal ein Wort eingelesen wird und ein Buchstabe angehängt wird. Dann gib ein kürzeres Wort ein.
-
@dirkb sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
@noskynet sagte in Wie schaffe ich es das restliche, nicht befüllte array nullterminieren lassen?:
Vielen vielen Dank, ich habe es gerade so eingesetzt mit char wort[50] = {} , ganz am Anfang und es funktioniert.
Du hast das Problem nicht begriffen
Ja das Problem war, dass das char array "wort" eine Zeichensbegrenzung von 50 Zeichen hat.
Beim hinzufügen eines Zeichens an dem eingegebenem Wort, wurden die restlichen Zeilen undefiniert hinzugefügt. Und mit der zusätzlichen Eingabe von "= {} " an dem "char wort[50]", wurde es definiert.
Wenn ich falsch liege, dann klär mich doch bitte auf, ich bin der Anfänger und du der Profi
-
Ich hoffe, dass das Folgende zu entziffern ist:
char c[10];
// Der Inhalt von c ist nicht definiert:
{X} {X} {X} {X} {X} {X} {X} {X} {X} {X}-> Einlesen z.B. "Hallo":
{H} {a} {l} {l} {o} {\0} {X} {X} {X} {X}
-> ist nullterminiert.
Dein stringlength würde jetzt 5 liefern.b an stelle 5 setzen (b ist 'A')
{H} {a} {l} {l} {o} {A} {X} {X} {X} {X}
Das heißt, die Nullterminierung würde überschrieben werden.
Lösung, wie bereits geschrieben, den Rückgabewert speichern:{H} {a} {l} {l} {o} {\0} {X} {X} {X} {X}
int len = stringlength(...); // 5
c[len] = b;
{H} {a} {l} {l} {o} {A} {X} {X} {X} {X}
c[len+1] = '\0';
{H} {a} {l} {l} {o} {A} {\0} {X} {X} {X}Hierbei (wie auch beim Einlesen) ist eigentlich noch peinlichst genau zu achten, dass nicht über die Arraygrenzen hinaus geschrieben wird.
Mit
char c[10] = { };werden alle chars mit 0 initialisiert:
{\0} {\0} {\0} {\0} {\0} {\0} {\0} {\0} {\0} {\0}Daher klappt es auch und daher auch DirkBs Einwand, es noch einmal mit einem kürzeren String zu probieren.