Eigenem Datentyp String zuweisen?

Big Poelly

Ensign
Registriert
Sep. 2006
Beiträge
169
Hi,

Habe ein kleines (aber äußerst ärgerliches) Problem mit einem C-Programm.

Ist wahrscheinlich banal, aber ich find den Fehler nicht.

Möchte mit einem selbst definiertem Datentyp

typedef struct
{
char k[5];
}kana;

ein Array machen

kana silbs[50];

und dem dann verschiedenste Silben in Form von Strings übergeben

folgendes Problem:

silbs[0]="a"; //error C2440: '=' : cannot convert from 'char [2]' to 'kana'

oder anders:

silbs[0].k="a"; //error C2106: '=' : left operand must be l-value

Wäre sehr dankbar wenn mich jemand auf den Fehler hinweisen könnte.
 
mein letztes c prog hab ich vor nem halben jahr geschrieben, deshalb kann es sein, dass da etwas bei mir nicht ganz korrekt ist.

Aber so wie ich es gerade sehe hast du in dem struct doch ein array definiert.
jetzt behandelst du das array wie eine normale variable.
Versuche doch mal das in eine possitionb des k arrays zuzuweisen.

Das könnte eher funktionieren.

ansonsten fallen mir gerade nur noch single quotes ein.

Als test könntest du ja auch anstatt dem char array nur ne char variable machen.
Wenn das geht hast du ja den fehler gefunden.
 
Wie wärs damit:
Code:
struct kana 
{
     char k[5];
};

kana silbs[50];
	
silbs[0].k[0] = 'a';

Gruß
BlackMark
 
Ich möchte aber nicht nur einen Buchstaben speichern, sondern mehrere und so nimmt er nur den ersten.
Wenn ich jeden Buchstaben einzeln speichern würde, würde das schnell unübersichtlich werden.

Wie kann ich einen ganzen String speichern?
 
Sorry, wenn ich das falsch verstanden habe:

silbs[0].k[0] = "aaaa";

funktioniert also nicht?

silbs.k[0][0]={"aaaa"};

Auch nicht?
 
Zuletzt bearbeitet:
funktioniert leider beides nicht.

werde das dann mal mit einer schleife versuchen und die buchstaben aus einer datei einlesen lassen. Vielleicht geht wenigstens das.
 
Zuletzt bearbeitet:
Ein sehr beliebter Fehler in der C/C++ Welt:
Ein String in der Form "Apfelkuchen" ist KEIN Array, sondern einfach eine konstante Folge von Literalen. So ein String braucht immer einen Zeiger, der auf ihn zeigt, um mit ihm arbeiten zu können.

So etwas geht: char* name_1 = "Alex";
Oder so etwas char name_2[] = { 'A', 'l', 'e', 'x', '\0'};

Im ersten Fall ist name_1 ein Zeiger auf ein einzelnes char. Das nette ist, dass sich die restlichen Zeichen direkt daran anschließen. Wie lange der String ist bekommt man mit strlen(name_1) raus. Die ist immer um 1 größer wegen der Stringendekennung '\0'.

Im zweiten Fall ist name_2 tatsächlich ein Array der Größe 5. Die Größe wir aus der Anzahl der initialisierten Elemente festgelegt.

Um jetzt auf das Threadproblem zu kommen:
Da das Strukturelement k in einer Struktur kana ein Array der Größe 5 ist und "a" ein String der Größe 2 kann "a" nicht k zugewiesen werden. Es sind zwei verschiedene Typen.
Man könnte höchsten silbs[0].k[0] = 'a' schreiben. So ist 'a' wirklich nur ein char der dem Arrayindex 0 zugewiesen werden kann.

Du willst aber Strings der Form "wort" in k schreiben.
In dem Fall bleibt dir nichts anderes übrig, als zeichenweise zu kopieren.
Bisschen Pseudocode zum selbst ausprogrammieren:
Code:
wenn Stringlänge <= 5 {   // wieviele Elemente hat k im struct?
   kopiere Anzahl Stringlänge Zeichen von String nach k;
}
Wenn du das jetzt in eine Funktion verpackst und einen Zeiger auf einer String und den Index auf den gewünschten Eintrag in silbs übergibst, dann passt das.
 
Und
slibs={"aaa"};

?

EDIT: Hat sich wohl durch Boron erledigt.
 
Zuletzt bearbeitet:
@badday
Raten wir jetzt rum ;)?

Geht nicht, da silbs ein Array vom Typ kana ist.
kana ist ein Array der Größe 5 von Typ char.
"aaa" ist String der Länge 4.
Sex zwischen Katzen und Hunden geht auch nicht :lol:.
 
Ja danke ich hab's nun verstanden.

Als ich den Beitrag geschrieben habe war deiner noch nicht da. Sonst hätte ich mir den gespart...

Man lernt ja nie aus.

Gruß,

badday
 
Danke für eure Hilfe, vor allem natürlich Boron.

Probier das ganze mal so. Vielen Dank.
 
Zurück
Oben