3 Fragen für Anfänger C++ 

  • Ersteller Ersteller reppesis
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
R

reppesis

Howdy!
Bräuchte einmal möglichst schnell Hilfe mit den folgenden Fragen, die nun eigentlich mit etwas fachwissen nicht schwer sein sollten:

1. In das Feld text [20] wurde der String Hallo Weeelt geschrieben. Geben Sie die mit Hilfe der Zeile:
cout B]
erzeugte Ausgabe an und erläutern Sie diese.

Ich schätze mal, das aus [1] ein a kommt, weil ja bei 0 angefangen wird zu zählen und bei [14] irgendein kauderwelch, weil vorher nix initialisiert wurde ... oder?


2. Was geschieht, wenn das Feld wie folgt deklariert wird: text [10] und anschließen der String Hallo Weeelt geschrieben würde. Begründen Sie Ihre Aussage.

Irgendwann wird jemand das t vermissen, oder?


3. Aus wievielen Elementen besteht das Feld, das mit der Zeile char w2 []="Test";" deklariert und initialisiert wird?

Die kniffeligste Frage, ich schätze mal es sind 6, weil das Zeilenende doch durch ein Slash irgendwas definiert wird ??
 
Ich hab grad noch nich so viel zeit zu antworten, daher erstmal die Frage:
Was spricht dagegen es auszuprobieren? Wenn du mich überzeugen kannst das du das nicht hinbekommst antworte ich dir nachher ;)

Neee, muss jetz erstmal zur arbeit, deshalb keine genaueren informationen jetzt..
 
das war gestern abend dringen wegen klausur heute morgen ... nu ist sie geschrieben, alles verloren :X

...... oder meine vermutungen waren richtig ;)
 
Mh... vielleicht hättest du ein wenig eher auf die Idee kommen können danach zu fragen... Naja vielleicht versau ich dir jetzt Deinen Tag, wenn ja tuts mir leid ;)

reppesis schrieb:
1. In das Feld text [20] wurde der String Hallo Weeelt geschrieben. Geben Sie die mit Hilfe der Zeile:
cout B]
erzeugte Ausgabe an und erläutern Sie diese.

Ich schätze mal, das aus [1] ein a kommt, weil ja bei 0 angefangen wird zu zählen und bei [14] irgendein kauderwelch, weil vorher nix initialisiert wurde ... oder?

bei [14] müsste nichts ausgegeben werden. Ich meine zu wissen (bin nicht 100% sicher) das arrays, wenn ihnen eine feste größe gegeben wird, automatisch initialisiert werden, in dem fall dann mit " "

reppesis schrieb:
2. Was geschieht, wenn das Feld wie folgt deklariert wird: text [10] und anschließen der String Hallo Weeelt geschrieben würde. Begründen Sie Ihre Aussage.

Irgendwann wird jemand das t vermissen, oder?
Nein, es wird zu einem compiler error kommen, weil du versuchst mehr speicher zu belegen als du reserviert hast.

reppesis schrieb:
3. Aus wievielen Elementen besteht das Feld, das mit der Zeile char w2 []="Test";" deklariert und initialisiert wird?

Die kniffeligste Frage, ich schätze mal es sind 6, weil das Zeilenende doch durch ein Slash irgendwas definiert wird ??
Es sind 5, die 4 Buchstaben + Endekennung '\0' was aber nur 1 Zeichen ist
 
Nein, es wird zu einem compiler error kommen, weil du versuchst mehr speicher zu belegen als du reserviert hast.

Nein, wenn man versucht, in einen unreservierten speicherblock zu schreiben, kommt es zu einem laufzeitfehler, unter Linux eine segmentation fault und unter windows weiß ich nicht, wies heißt;
 
Nein, wenn man versucht, in einen unreservierten speicherblock zu schreiben, kommt es zu einem laufzeitfehler, unter Linux eine segmentation fault und unter windows weiß ich nicht, wies heißt;

Dann muss das irgendwie auch compilerabhängig sein, denn wenn ich diesen Fehler mit dem in VC++ compiler compiliere bekomme ich keinen runtime error, sondern einen Compiler error: "C2117: 'text' : array bounds overflow".

Beim cc compiler bekomme ich die Meldung "(E) String literal is longer than target array. Literal is truncated on the right." CC erkennt den Fehler und kürzt den String automatisch. -> auch kein runtime error

Beim mingw und codeblocks bekomme ich ebenfalls einen compiler error: "error: initializer-string for array of chars is too long
:: === Build finished: 1 errors, 0 warnings ==="

Also einen runtime error konnte ich nicht erzeugen :)
 
Das ist von Compiler zu Compiler unterschiedlich. Der Punkt ist einfach, das syntaktisch korrekte Programme in nicht allozierte Speicherbereiche schreiben können was halt zu dem besagten Fehler führt.

Hatte ich gestern noch mit dem bcc32 gehabt :(
 
Ja, aber es ging doch explizit um dieses Beispiel:

PHP:
 char text[10] = "Hallo Weeelt";

Das ist ein Fehler der bereits beim Kompilieren bekannt ist und deshalb sollte es meiner Meinung nach auch immer einen Compiler-Error geben. Anders ist es wenn man zur Laufzeit Text eingibt und in einem zu kleinen array speichern will, dann wird es einen Runtime-error geben...

Wenn ihr immernoch der Meinung seid das es (bei dem o.g. Beispiel) zu einem Laufzeitfehler kommt posted mal bitte den namen vom compiler den ihr verwendet habt und den sourcecode, das würde ich gerne mal sehen... :)
 
Stimmt auch wieder ....

Das geht natürlich nur wenn der "Overflow" während der Laufzeit erst auftritt (zB durch Benutzereingabe ohne neuen Speicher zu allozieren)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten