Hilfe beim arbeiten mit Feldern
-
An die Anfänger/Neulinge:
bitte kompiliert euren Code immer mit eingeschalteten Warnungen!Wenn ich den Code von @theAnfänger77 kompiliere, ergibt sich:
$ clang++-7 -Wall -Wextra forum.cpp forum.cpp:14:48: warning: array index 7 is past the end of the array (which contains 7 elements) [-Warray-bounds] <<Binaer[4]<<Binaer[5]<<Binaer[6]<<Binaer[7]<<endl; ^ ~ forum.cpp:7:5: note: array 'Binaer' declared here char Binaer[7]; ^ forum.cpp:22:16: warning: array index 7 is past the end of the array (which contains 7 elements) [-Warray-bounds] ||(Binaer[7] != '0' && Binaer[7] != '1')); ^ ~ forum.cpp:7:5: note: array 'Binaer' declared here char Binaer[7]; ^ forum.cpp:22:36: warning: array index 7 is past the end of the array (which contains 7 elements) [-Warray-bounds] ||(Binaer[7] != '0' && Binaer[7] != '1')); ^ ~ forum.cpp:7:5: note: array 'Binaer' declared here char Binaer[7]; ^ forum.cpp:24:9: warning: array index 7 is past the end of the array (which contains 7 elements) [-Warray-bounds] if (Binaer[7] == '1') ^ ~ forum.cpp:7:5: note: array 'Binaer' declared here char Binaer[7]; ^ 4 warnings generated.
Also - so funktioniert es nicht. Vergesst
am Anfang erst einmaldie Arrays und nehmt stattdessenstd::string
für Char-Arrays undstd::vector
für alle anderen Array-Typen. Ich verwende in C++ praktisch überhaupt keine C-Style-Arrays.
-
@manni66 sagte in Hilfe beim arbeiten mit Feldern:
@theAnfänger77 sagte in Hilfe beim arbeiten mit Feldern:
char Binaer[7];
Das ist ja noch schlimmer als die Lösung von @RBS2.
Was sagt der große Meister dazu?
char Binaer[8]; cin >> setw(8) >> Binaer;
Immer noch Buffer Overflow?
-
@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
@manni66 sagte in Hilfe beim arbeiten mit Feldern:
@theAnfänger77 sagte in Hilfe beim arbeiten mit Feldern:
char Binaer[7];
Das ist ja noch schlimmer als die Lösung von @RBS2.
Was sagt der große Meister dazu?
char Binaer[8]; cin >> setw(8) >> Binaer;
Immer noch Buffer Overflow?
Herrgott noch mal...
std::string ScheissEgalWievieleZeichenVerdammtNochMal = ""; std::cin >> ScheissEgalWievieleZeichenVerdammtNochMal;
Ich schwöre, ich poste hier gleich die fertige Lösung, damit hier endlich Ruhe ist....
-
@RBS2 sagte in Hilfe beim arbeiten mit Feldern:
Was sagt der große Meister dazu?
char Binaer[8]; cin >> setw(8) >> Binaer;
Immer noch Buffer Overflow?
Wieviele Bits kann man da jetzt eingeben?
Aber warum sollte man eine einfache Lösung verwenden, wenn man sich doch mit char-Arrays auf unendlich vielen Wegen in den Fuß schießen kann?
-
@manni66 sagte in Hilfe beim arbeiten mit Feldern:
Wieviele Bits kann man da jetzt eingeben?
Ich seh's schon. Es wird wieder eine überflüssige Null angehängt.
-
@It0101 sagte in Hilfe beim arbeiten mit Feldern:
Herrgott noch mal...
std::string ScheissEgalWievieleZeichenVerdammtNochMal = "";
std::cin >> ScheissEgalWievieleZeichenVerdammtNochMal;Der Herrgott kann nichts dafür. Das war bestimmt der Teufel, der 'cin' auch char-Arrays befüllen lässt.
-
Ach du heilige... ^^
Zerfleischt euch jetzt nicht wegen einer Anfängerfrage.
-
So ungefähr würde wohl eine halbwegs gescheite Lösung aussehen. Um das Thema hier mal zu beschließen
int main( int argc, char **argv ) { unsigned long long Dezimal = 0; // Zahl eingeben std::cout << "Gib eine Binaerzahl ein, beginnend mit dem niederwertigsten Bit: "; std::string Binaer = ""; std::cin >> Binaer; // Bits berenzen if ( Binaer.size() > sizeof( Dezimal ) * 8 ) { std::cout << "Zuviele Bits fuer Zieldatentyp\n"; return 0; } // Eingabe ueberpruefen for ( const char &bit : Binaer ) { if ( bit != '0' && bit != '1' ) { std::cout << "Binaerzahlen duerfen nur aus 0 oder 1 bestehen\n"; return 0; } } std::cout << "Binaerzahl erfolgreich eingelesen\n"; // Umrechnen in unsigned long long BitValue = 1; for ( const char &bit : Binaer ) { if ( bit == '1' ) Dezimal |= BitValue; BitValue = BitValue << 1; } std::cout << "Binaerzahl " << Binaer << " ins Dezimalsystem umgerechnet ergibt " << Dezimal << "\n"; return 0; }
-
Warum die explizite Zuweisung in Zeile 5? Das erledigt doch schon der Konstruktor?
Und warum steht das niederwertigste Bit am Anfang des strings und nicht am Ende?
-
@DocShoe sagte in Hilfe beim arbeiten mit Feldern:
Warum die explizite Zuweisung in Zeile 5? Das erledigt doch schon der Konstruktor?
Für den C++ noob könnte so der Eindruck enstehen, 'cin' würde die Eingabe an den String anhängen.