Fehlermeldung bei Deklaration von Strings als char-Arrays

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Orioner » Mi Sep 02, 2020 9:24 pm

Warum bekomme ich bei folgendem Code:

Code: Alles auswählen

char drillCompanyName[0][] = "Deep Throat Inc.";
char drillCompanyName[1][] = "Tief & Schnell AG";
char drillCompanyName[2][] = "Turbo & Drill GmbH";
Immer diese Fehlermeldungen:
Error E2453 main.c 92: Size of the type 'signed char[]' is unknown or zero
Error E2445 main.c 92: Variable 'drillCompanyName' is initialized more than once
Error E2275 main.c 92: { expected

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von cloidnerux » Mi Sep 02, 2020 9:49 pm

Zuerst deklarierst du eine Variable mehr als einmal, das geht natürlich nicht.
Variable 'drillCompanyName' is initialized more than once
Dann musst du dich überhaupt mal fragen, was du hier genau haben möchtest. In deinem statischen Code hast du ein Array aus drei Strings, das du statisch, daher zur Compilierzeit, initialisieren möchtest.
Das würde mann wenn dann so machen:

Code: Alles auswählen

char drillCompanyName[3][] = {"Deep Throat Inc.",
							"Tief & Schnell AG",
							"Turbo & Drill GmbH"};
Sinnigerweise möchtest du aber wrsl für sowas eine dynamische liste haben.
Redundanz macht wiederholen unnötig.
quod erat expectandum

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von mfro » Do Sep 03, 2020 6:32 am

cloidnerux hat geschrieben:
Mi Sep 02, 2020 9:49 pm
Das würde mann wenn dann so machen:

Code: Alles auswählen

char drillCompanyName[3][] = {"Deep Throat Inc.",
			"Tief & Schnell AG",
			"Turbo & Drill GmbH"};
...
So würde man das - wahrscheinlich - eher nicht machen (der Code ist fehlerhaft und compiliert so nicht). Bei der Deklaration eines mehrdimensionalen Arrays kann man lediglich die erste Arraydimension weg (bzw. vom Compiler selbst bestimmen) lassen, nicht aber die letzte.
Aber auch wenn man's richtig macht, würde man's so eher nicht machen (es sei denn, die Strings wären alle gleich lang und ihre Länge fix), sondern eher so:

Code: Alles auswählen

char *drillCompanyName[3] = { "Deep Throat Inc.",
  			"Tief & Schnell AG",
			"Turbo & Drill GmbH"};
Was ist da jetzt anders und warum ist das besser?
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Xin » Do Sep 03, 2020 9:47 am

Orioner hat geschrieben:
Mi Sep 02, 2020 9:24 pm
Warum bekomme ich bei folgendem Code:

Code: Alles auswählen

char drillCompanyName[0][] = "Deep Throat Inc.";
char drillCompanyName[1][] = "Tief & Schnell AG";
char drillCompanyName[2][] = "Turbo & Drill GmbH";
Immer diese Fehlermeldungen:
Error E2453 main.c 92: Size of the type 'signed char[]' is unknown or zero
Error E2445 main.c 92: Variable 'drillCompanyName' is initialized more than once
Error E2275 main.c 92: { expected
Die Lösung hat mfro ja bereits geschrieben.

Die Antwort auf die Frage: char <IDENTIFIER> ist eine Deklaration von Identifier. Du sagst dem Compiler "Hör zu, ich möchte, dass Dir den neuen Identifier vorstellen, der da drillCompanyName heißt". Und dann kommt das in der nächsten Zeile wieder und der Compiler sagt: "Hey, den kenne ich aber schon - meint drillCompanyName jetzt die eine oder die andere Variable? Kapier ich nicht."

Du möchtest EINE Variable deklarieren und da sie ein Array ist, möchtest Du das EINE Array initialisieren - so wie mfro das macht. Oder Du möchtest den drei Elementen etwas zuweisen.

Code: Alles auswählen

char * drillCompanyName[3];    // Deklaration ohne Initialisation

drillCompanyName[0] = "Deep Throat Inc.";              // kein char drillCompanyName, da der Identifier nicht neu deklariert/vorgestellt wird.
drillCompanyName[1] = "Tief & Schnell AG";
drillCompanyName[2] = "Turbo & Drill GmbH";
Was genau macht eigentlich eine Bohr-Gesellschaft, die Deep Throat heißt? Wenn die Zahnarztzubehör liefern, könnte das in einem klassischen Horrorfilm enden oder handelt es sich hier um ein anderes Filmgenre?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Orioner » Do Sep 03, 2020 12:22 pm

Dann werde ich das mal so machen, wie mfro vorschlug. Ich erlag da wohl leider einem Denkfehler, die Initialisierung betreffend. (Und jetzt, da ich es weiß, klingt es auch logisch.) Danke euch!

Allerdings leuchtet mir nicht ganz ein, warum ich den Stern-Operator brauche (und was das für Konsequenzen hat). :(
Xin hat geschrieben:
Do Sep 03, 2020 9:47 am
Was genau macht eigentlich eine Bohr-Gesellschaft, die Deep Throat heißt? Wenn die Zahnarztzubehör liefern, könnte das in einem klassischen Horrorfilm enden oder handelt es sich hier um ein anderes Filmgenre?
Hehe. Die Texte stammena aus einem alten C64-Spiel aus den 80er Jahren, das "Oel" hieß. Mein Ziel ist es, das Spiel nach Windows zu portieren, zuerst in textform (für die Konsole) und später mit einem grafischen Interface.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Xin » Do Sep 03, 2020 9:43 pm

Orioner hat geschrieben:
Do Sep 03, 2020 12:22 pm
Allerdings leuchtet mir nicht ganz ein, warum ich den Stern-Operator brauche (und was das für Konsequenzen hat). :(
Der sagt aus, dass hier 3 Zeiger auf Char sind, also auf den ersten Char eines Textes. Das ganze ist also ein Array aus drei Zeigern. Wenn Du ein kompaktes Array wünschst, musst Du festlegen wie groß die Texte maximal sein dürfen und dann sind alle Texte genau so lang.
Xin hat geschrieben:
Do Sep 03, 2020 9:47 am
Was genau macht eigentlich eine Bohr-Gesellschaft, die Deep Throat heißt? Wenn die Zahnarztzubehör liefern, könnte das in einem klassischen Horrorfilm enden oder handelt es sich hier um ein anderes Filmgenre?
Hehe. Die Texte stammena aus einem alten C64-Spiel aus den 80er Jahren, das "Oel" hieß. [/quote]
Oel?
Ich habe es im C64-Wiki gefunden, aber das kannte ich noch nicht.
Ich kenne nur "Oil Imperium", da hatte ich mal überlegt, ob ich das reimplementiere, aber das würde vermutlich teuer. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Orioner » Do Sep 03, 2020 11:22 pm

Ja, "Oil Imperium" kennt wirklich jeder, Oel kaum einer, obwohl ich das viel besser finde, weil puristischer. Ich weiß zwar nicht, warum das Rework teuer werden sollte, aber vielleicht, weil du in deinem regulären Job sehr gut bezahlt wirst.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Xin » Fr Sep 04, 2020 10:42 am

Orioner hat geschrieben:
Do Sep 03, 2020 11:22 pm
Ich weiß zwar nicht, warum das Rework teuer werden sollte, aber vielleicht, weil du in deinem regulären Job sehr gut bezahlt wirst.
Ähm... das könnte sein. Aber das wüsste ich wohl.

Das Rework könnte teuer werden, weil es vermutlich Rechteinhaber gibt, die die Idee auch gut finden, mit meinem Plagiats mir noch mal eine Rechnung zu schicken, weil ich deren Idee reimplementiert habe - oder wenigstens ihren bekannten Namen genutzt habe?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Orioner » Fr Sep 04, 2020 5:50 pm

Ach ja, verstehe. Nun, das kann mir mit Oel nicht passieren, da ich das ausschließlich für mich selber mache und nicht über einen Release nachdenke.
Noch eine Frage zu obigem char-Array: Wie man sieht, sind die Strings alle unterschiedlich lang. Wie kann ich nun die Länge von einzelnen Strings ermitteln?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fehlermeldung bei Deklaration von Strings als char-Arrays

Beitrag von Xin » Fr Sep 04, 2020 6:30 pm

Orioner hat geschrieben:
Fr Sep 04, 2020 5:50 pm
Ach ja, verstehe. Nun, das kann mir mit Oel nicht passieren, da ich das ausschließlich für mich selber mache und nicht über einen Release nachdenke.
Noch eine Frage zu obigem char-Array: Wie man sieht, sind die Strings alle unterschiedlich lang. Wie kann ich nun die Länge von einzelnen Strings ermitteln?
Die C-Library gibt Dir dafür die strlen()-Funktion mit.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten