Hallo! Ich möchte ein char array eingeben, welches 64 zeichen haben soll! wie veranstelte ich das am besten? also ich hab das einfach mal mit einer for schleife gemacht, da muss ich aber nach jedem zeichen return/enter drücken! Gibt es da eine elegantere lösung, bei der ich ein feld auf dem bildschrim hab, wo ich 64 zeichen eintragen kann, und dann nter drücke? 16 Zeichen würden mir reichen! Da das Dislay 4 mal 16 Zeichen hat! mfg Jan
Am Mittwoch, 27. August 2003 02:46 schrieb Jan Hendrik Berlin:
Hallo! Ich möchte ein char array eingeben, welches 64 zeichen haben soll! wie veranstelte ich das am besten? also ich hab das einfach mal mit einer for schleife gemacht, da muss ich aber nach jedem zeichen return/enter drücken! Gibt es da eine elegantere lösung, bei der ich ein feld auf dem bildschrim hab, wo ich 64 zeichen eintragen kann, und dann nter drücke? 16 Zeichen würden mir reichen! Da das Dislay 4 mal 16 Zeichen hat!
mfg Jan
Probiers mal so:
/************************************************************************/
#include <iostream> // Deklaration für cout usw.
using namespace std;
int main()
{
const unsigned int LAENGE = 65;
// 64 Zeichen für die Eingabe
// 1 Zeichen für die Nullterminierung
char eingabe[LAENGE];
cout<<"Eingabe von bis zu 64 Zeichen:"<
[...]
#include <iostream> // Deklaration für cout usw.
using namespace std;
int main() { const unsigned int LAENGE = 65; // 64 Zeichen für die Eingabe // 1 Zeichen für die Nullterminierung char eingabe[LAENGE]; cout<<"Eingabe von bis zu 64 Zeichen:"<
>eingabe; // einfache Möglichkeit // ODER: mit cin.getline() cin.getline(eingabe,LAENGE); // die Funktion getline() achtet darauf dass // wirklich nur 64 Zeichen eingelesen werden // ansonsten kann es zu einem Speicherfehler // kommen (z.b: bei cin>>eingabe;) wenn // mehr als 64 Zeichen eingegeben werden! return 0; } /********************************************************************/
-- Stefan Lang EMail: langstefan@gmx.at
JI, das sieht ganz gut aus! Nur erzeugt cin.getline immer einen
Speicherzugriff fehler!
folgende ausgabe:
Tux007:/home/jhb/c++ # ./test
1234567890
Speicherzugriffsfehler
Tux007:/home/jhb/c++ #
Das Programm sieht so aus:
# include
Jan Hendrik Berlin
JI, das sieht ganz gut aus! Nur erzeugt cin.getline immer einen Speicherzugriff fehler!
Das Programm sieht so aus: # include
int main() { int i=11; char text; char * textz; textz= &text; cin.getline(textz, i); cout << "ifiurfiuerhg"; cout << textz; return 0; }
Lass dir doch bitte irgendwo einen vernünftigen Kurs in Programmieren verpassen, denn so ganz scheinst du die Konzepte noch nicht begriffen zu haben. int main() { int i=11; // 11 Zeichen char text; // hat Platz für 1! Zeichen char * textz; textz= &text; cin.getline(textz, i); // und hier willst du in dieses eine Zeichen // 11+Nullbyte packen. Das schreibt über die // Grenzen hinaus und du bekommst einen // Segfault. cout << "ifiurfiuerhg"; cout << textz; return 0; } Wie wär's damit #include <iostream> int main() { char text[11+1]; std::cin.getline(text,sizeof(text)); std::cout << "....v....1." << std::endl; std::cout << text << std::endl; return 0; }
Am Freitag, 29. August 2003 01:57 schrieb Jan Hendrik Berlin:
[...]
#include <iostream> // Deklaration für cout usw.
using namespace std;
int main() { const unsigned int LAENGE = 65; // 64 Zeichen für die Eingabe // 1 Zeichen für die Nullterminierung char eingabe[LAENGE]; cout<<"Eingabe von bis zu 64 Zeichen:"<
>eingabe; // einfache Möglichkeit // ODER: mit cin.getline() cin.getline(eingabe,LAENGE); // die Funktion getline() achtet darauf dass // wirklich nur 64 Zeichen eingelesen werden // ansonsten kann es zu einem Speicherfehler // kommen (z.b: bei cin>>eingabe;) wenn // mehr als 64 Zeichen eingegeben werden! return 0; } /********************************************************************/
-- Stefan Lang EMail: langstefan@gmx.at
JI, das sieht ganz gut aus! Nur erzeugt cin.getline immer einen Speicherzugriff fehler! folgende ausgabe: Tux007:/home/jhb/c++ # ./test 1234567890 Speicherzugriffsfehler Tux007:/home/jhb/c++ #
Das Programm sieht so aus: # include
int main() { int i=11; char text; char * textz; textz= &text; cin.getline(textz, i); cout << "ifiurfiuerhg"; cout << textz; return 0; }
Was mache ich falsch????
mfg Jan
Mit dem Datentyp char reservierst du nur
Speicherplatz für 1 einziges Zeichen.
Du must ein char Feld erzeugen, das
11 char Variablen beinhaltet, wenn du 10
Zeichen oder weniger einlesen willst.
z.B.
int i = 11;
char text[11];
// Die Variable text ist jetzt bereits ein ZEIGER
// auf das 1. Zeichen im char Feld
char *textz = text; // Variable textz ist unnötig
cin.getline(textz,i); // statt textz kann man auch gleich text
// übergeben
cout<
participants (3)
-
Jan Hendrik Berlin
-
Philipp Thomas
-
Stefan Lang