Welche Ausgabe erzeugt das Programm?
-
HEY!
Welche Ausgabe erzeugt das Programm? Begründen sie ihre Antwort.
#include <stdio.h> void main (void){ char *str= "Hallo, Welt!"; str[2]='x'; printf("%s\n",str); }
int a[3]={1,2,3}; int b[3]={4,5,6}; a=b;
welchen wert hat a[2] nach der zuweisung?
zu 1.
-> H
das str => str[0] also wird nur das erste zeichen ausgegeben aber das ist ein * also muss das nicht so sein...zu 2.
->a[2] ist 3weil nur a[0] den inhalt von b[0] bekommt ???
habe es mal eingetippt aber bekomme nichts raus...danke!!!!
-
HAUSAUFGABE HAUSAUFGABE HAUSAUFGABE
HAUSAUFGABE HAUSAUFGABE HAUSAUFGABE
HAUSAUFGABE HAUSAUFGABE HAUSAUFGABE
HAUSAUFGABE HAUSAUFGABE HAUSAUFGABE
HAUSAUFGABE HAUSAUFGABE HAUSAUFGABE
HAUSAUFGABE HAUSAUFGABE HAUSAUFGABE
grr1)Unhandled exception at 0x004113b8 in bla.exe: 0xC0000005: Access violation writing location 0x00415642.
2)d:\bla\main.cpp(5) : error C2106: '=' : left operand must be l-valueachso^^ - wer hat dir so ne aufgabe gestellt?^^
-
#include <stdio.h> void main (void){ char *str= "Hallo, Welt!"; str[2]='x'; printf("%s\n",str); }
FEHLER.....
du erzeugst einen Zeiger "char *str" der auf den string "Hallo, Welt!" zeigen soll? es muss er st im speicher platzt für "Hallo,Welt!" generiert werden
[cpp]char str**[20]** ="Hallo, Welt!" //reservieren[/cpp]
mit str[2]='x'; wir das driete byte des str überschrieben
ausgabe:
"Haxlo, Welt!"
zu 2.
a und b sind zeiger auf das erste elment von dem array..
wenn ich nun a=b mache wird die referenz a durch b überschrieben, das heist a hat die adrese von b
und b[2] zeigt dann auf 6
-
BorisDieKlinge schrieb:
zu 2.
a und b sind zeiger auf das erste elment von dem array..
wenn ich nun a=b mache wird die referenz a durch b überschrieben, das heist a hat die adrese von b
und b[2] zeigt dann auf 6
Arrays sind keine Zeiger (auch wenn sie beim ersten Anzeichen einer Gefahr in Zeiger zerfallen) - und die Zuweisung
b=a;
erzeugt nur eins: einen saftigen Syntax Error
-
ups.... stimmt.. im eifer des gefechts
-
BorisDieKlinge schrieb:
du erzeugst einen Zeiger "char *str" der auf den string "Hallo, Welt!" zeigen soll? es muss er st im speicher platzt für "Hallo,Welt!" generiert werden
Stimmt nicht, da muss gar nichts "generiert" werden (reserviert, angefordert, alloziert sagt man eigentlich). Allerdings können String-Literale read-only sein, deshalb sollte man, wenn sie verändern will, eine schreibbare Kopie anlegen.
-
es sind keine hausaufgaben sonder aufgaben aus einer probeklausur...
zu 1.man müsste damit es läut ein str[20] machen aber das das nicht teil der aufgabe ist, ist das str[2]='x' nicht richtig weil ich kein array hab,somit gibt es keine ausgabe...wenn ich die str[2]='x' raus nehme wird Hallo, Welt! ausgegeben.
zu 2.a=b ist nicht möglich das gibt nen error...
danke für die hilfe!
-
Steffi... schrieb:
zu 1.man müsste damit es läut ein str[20] machen aber das das nicht teil der aufgabe ist, ist das str[2]='x' nicht richtig weil ich kein array hab,somit gibt es keine ausgabe...wenn ich die str[2]='x' raus nehme wird Hallo, Welt! ausgegeben.
Das hängt ganz davon ab, wie dein Compiler arbeitet - es gibt sicher auch welche, die String-Literale so ablegen, daß das Programm funktioniert.
-
ja ok DANKE!
-
CStoll schrieb:
Das hängt ganz davon ab, wie dein Compiler arbeitet - es gibt sicher auch welche, die String-Literale so ablegen, daß das Programm funktioniert.
verhalten ist undefiniert