Warnung beim einen Compiler, keine bei einem anderen. Was ist das Problem?
-
Hallo ihr Lieben,
ich habe in C eine Struktur wie folgt erstellt:{ char vorname[30]; char nachname[30]; int alter; } Person;
Wenn ich nun in der main-Funktion
Person p; printf("Vorname: "); scanf("%s", p.vorname);
schreibe, dann klappt das bei meinem Compiler. Aber wenn ich das in der Online-IDE (online-ide.com) eingebe, dann gibt eine eine Warnung aus:
format %s expects argument of type 'char*', but argument 2 has type 'char (*)[30]'
beschwert er sich wirklich, dass ich in ein Array schreibe? Das funktioniert ja, und der Arrayname ist ja die Adresse des ersten Elements...
Was ist da los?Vielen Dank für jede Hilfe und jeden Hinweis...
-
Bist du dir bei
typedef struct tagPerson { char vorname[30]; char nachname[30]; // nicht etwa char* nachname[30]? int alter; } Person;
sicher? Bei mir meldet dein Code auf online-ide keinen Fehler (mit dem C-Compiler).
-
@Hawaiihemd sagte in Warnung beim einen Compiler, keine bei einem anderen. Was ist das Problem?:
scanf("%s", p.vorname);
Das ist gefährlich, weil keine Längenangabe dabei ist. Wenn jemand mehr Zeichen eingibt als vorgesehen, kann alles mögliche passieren.
scanf("%30s", p.vorname)
oderscanf_s
nutzen.Edit:
%29s
bei einem 30er Array.
-
Es ist sehr seltsam. Aber jetzt macht er, was er soll, ohne Warnung.
Tatsächlich ist mir irgendwie ein &-Zeichen jeweils vor p.vorname bzw. p.nacchname reingerutscht.
Hatte ich aber in meiner Version in der Entwicklungsumgebung nicht. Keine Ahnung, wie das da reingekommen ist.
Jetzt gibt es keine Warnung mehr in der online-ide.
ABER: Nach der Ausgabe "Vorname: " springt die IDE autpmatisch in die nächste Zeile. Was mich auch wiederum wundert...
-
Dieser Beitrag wurde gelöscht!
-
@wob Klasse Hinweis, vielen Dank!
-
Was war den der Klasse Hinweis, der Beitrag von @DocShoe wurde gelöscht
-
@Helmut-Jakoby sagte in Warnung beim einen Compiler, keine bei einem anderen. Was ist das Problem?:
Was war den der Klasse Hinweis, der Beitrag von @DocShoe wurde gelöscht
Der Beitrag von @wob war klasse, nicht meiner
-
@wob sagte in Warnung beim einen Compiler, keine bei einem anderen. Was ist das Problem?:
@Hawaiihemd sagte in Warnung beim einen Compiler, keine bei einem anderen. Was ist das Problem?:
scanf("%s", p.vorname);
Das ist gefährlich, weil keine Längenangabe dabei ist. Wenn jemand mehr Zeichen eingibt als vorgesehen, kann alles mögliche passieren.
scanf("%30s", p.vorname)
oderscanf_s
nutzen.Da bei scanf die maximale Anzahl der Zeichen angegeben wird, muss noch Platz für die terminierende '/0' sein.
Also „%29s“ oder das Array auf 31 Zeichen vergrößern.
-
Man sieht: ich schreibe fast nie C (und wenn, dann wird da rumgerechnet, aber kein scanf gemacht). Naja. So fest codierte Zahlen sind sowieso blöd, insbesondere wenn man mal die Größe ändern will.
Danke für den Hinweis.