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.


Anmelden zum Antworten