unterschied zwischen char und int array?!
-
hi,
#include<iostream> #include<conio.h> using namespace std; int main() { int i; char cfeld[5]; int ifeld[5]; for(i=0;i<5;++i){ cfeld[i]=getch(); ifeld[i]=getch(); } cout << "\n" << cfeld << endl; cout << "\n" << ifeld << endl; }
frage 1:
wieso sind hinter der ausgabe von cfeld mehrere hyroglyphen?ausgabe 10*k eingelesen:
kkkkk╠╠╠
0012FF60
frage 2:
wieso wird ein int array als adresse ausgegeben wenn ich cout benutze. wieso wird nach 5*k über getche() einlesen nicht 5 mal 107 ausgegeben
mfg
-
zu frage 1
ich glaube cout gibt solange den datenstrom aus (dein char array) bis er auf 0x00 stößt. vergrößere das feld auf 6 bytes und packe in das letztes eine null
-
1. cfeld ist nicht null-terminiert. Strings müssen in C immer mit einem nachfolgenden '\0'-Zeichen terminiert werden, damit du nachher weißt, wann der String zuende ist.
2. Es gibt keinen Ausgabeoperator für int*s im Speziellen, das Ding wird implizit als void* verstanden und dementsprechend als Adresse ausgegeben. Wenn du das int-Array zahlenweise ausgeben willst, mach etwas in der Art:
for(int i = 0; i < 5; ++i) std::cout << ifeld[i] << ' '; std::cout << std::endl;
oder, more sophisticated:
#include <algorithm> #include <iostream> #include <iterator> //... std::copy(ifeld, ifeld + 5, std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl;
-
egal wie ich es vergrößer oder was ich mit getch() einlese, nach der ausgabe über cout kommen am ende immer diese hyroglyphen
-
Du musst am ende eine Null ('\0'; 0x0; etc...) reinschreiben, damit diese "Hyroglyphen" nicht angezeigt werden.