char variablen
-
Hallo,
#include <iostream> #include <string> //für size und string using namespace std; int main(){ string a; cin >> a; //für die Größe; size_t size = a.size(); //size von a bestimmen char *b; b = new char[size]; //zeiger zeigt auf die speicheradresse von size-vielen chars int i = 0; for(; i < size; i++){ b[i] = a[i]; //stringinhalt wird kopiert } b[size] = '\0'; //hänge ein 0-Zeichen an }Warum eigentlich so umständlich. Nutze doch string.
MFG winexec*
-
Das ist auch reichlich umständlich und zudem noch falsch.
Das hierb = new char[size - 1];sollte wohl eher so heissen
b = new char[size + 1];Warum eigentlich nicht strncpy?
Der Rat, nur string zu benutzen, ist aber der besser.
-
wieso unbedingt char?
string geht wohl nicht?oder zumindest:
string text; cin>>text; wasauchimmergemachtodergebrauchtwird = text.c_str();
-
Hallo,
Ich habe nicht an das 0-Zeichen gedacht.
#include <iostream> #include <string> //für size und string using namespace std; int main(){ string a; cin >> a; //für die Größe; size_t size = a.size(); //size von a bestimmen cout << size; char *b; b = new char[size]; //zeiger zeigt auf die speicheradresse von size-vielen chars int i = 0; for(; i < size; i++){ b[i] = a[i]; //stringinhalt wird kopiert } b[size] = '\0'; //hänge ein 0-Zeichen an }MFG winexec*
-
Wie ser1al schon zeigte:#include <string>
using namespace std;int main(){
char* textPtr;
string text;
cin >> text;textPtr = text.c_str();
}
[cpp]
Kopieren braucht man nicht, man hat ja jetzt einen Zeiger auf das nullterminierte char-Array.
mfg
-
winexec* schrieb:
Hallo,
Ich habe nicht an das 0-Zeichen gedacht.
Dann denk doch endlich mal daran
Dein Code benötigt ein "b=new char[size**+1**];", sonst bekommst du Zugriffsprobleme (string zählt das '\0' nicht mit).
-
Hallo,
Sehe ich das falsch oder reserviere ich mit new char[size] nicht schon size + 1 Elemente
?MFG winexec*
-
Das siehst Du falsch.
-
Hallo,
Ich glaub ich muss mich mal ausschlafen gehen:
Eingabe: hallo(5)
new:ptr = new char[5] { 0,1,2,3,4,5 } (6)
ptr[5](6)
MFG winexec*
-
du hast die nullterminierung vergessen, die braucht auch noch platz (1) \0
-
char a[5]-->a[0];a[1];a[2];a[3];a[4]
oder nicht?
und a[4] geht für \0 drauf.
also hat man noch 4 stellen frei.wenn man 6 Stellen haben will muss man char a[7] machen. da a[6] für \0 drauf geht.
-
ja also brauch man für das wort h[0]a[1]l[2]l[3]o[4]\0[5] eine größe von 6

-
richtig
