char Funktion - Problem
-
Hi
ich habe folgendes Problem: Ich habe eine Funktion, der ich einen Int-Wert übergebe und die mir einen String zurückgeben soll:
Die Funktion síeht wie folgt aus:char genre_liste(int i_genrenr) { char liste[115][25]={ "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial", "Alternative", "Ska", "Dath Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise", "Alternative Rock", "Bass", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native US", "Cabaret", "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock", "Folk", "Folk-Rock", "National Folk", "Swing", "Fast Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic 100 - Humour", "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklor" }; if (i_genrenr <= 115) return liste[i_genrenr]; else return 0; }
Der Aufruf der Funktion lautet so:
int i_genre; struct id3 { char sz_titel[31]; char sz_interpret[31]; char sz_album[31]; char sz_jahr[5]; char sz_kommentar[31]; char sz_genre[25]; }mp3; strcpy( mp3.sz_genre,genre_liste(&i_genre));
Ich erhalte beim erstellen immer folgenden Hinweis:
--------------------Konfiguration: menu - Win32 Debug-------------------- Kompilierung läuft... main.cpp C:\Studium\C\menu\main.cpp(277) : error C2664: 'genre_liste' : Konvertierung des Parameters 1 von 'int *' in 'int' nicht moeglich Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\Studium\C\menu\main.cpp(468) : error C2440: 'return' : 'char [25]' kann nicht in 'char' konvertiert werden Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat Fehler beim Ausführen von cl.exe. menu.exe - 2 Fehler, 0 Warnung(en)
Was ist falsch?
Vielen Dank
-
Hallo,
es liegt wahrscheinlich daran ,daß du bei "genre_liste(&i_genre)" die Adresse von i_genre übergibst, aber die Fktn erwartet ja nur den Wert und keinen Zeiger!
Mfg
-
ok, kommen aber immer noch 2 Fehler:
--------------------Konfiguration: menu - Win32 Debug-------------------- Kompilierung läuft... main.cpp C:\Studium\C\menu\main.cpp(277) : error C2664: 'strcpy' : Konvertierung des Parameters 2 von 'char' in 'const char *' nicht moeglich Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\Studium\C\menu\main.cpp(468) : error C2440: 'return' : 'char [25]' kann nicht in 'char' konvertiert werden Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat Fehler beim Ausführen von cl.exe. menu.exe - 2 Fehler, 0 Warnung(en)
-
moin
hab das mal ein wenig verändert:
#include <stdio.h> #include <stdlib.h> char *genre_liste(int i_genrenr) { static char liste[3][25]={ "Blues", "Classic Rock", "Country", }; if(i_genrenr <= 3) return liste[i_genrenr]; else return 0; } int main(void) { struct id3 { char sz_titel[31]; char sz_interpret[31]; char sz_album[31]; char sz_jahr[5]; char sz_kommentar[31]; char sz_genre[25]; }; struct id3 *ptr; int i_genre = 1; ptr = malloc(sizeof(struct id3)); strcpy(ptr->sz_genre,genre_liste(i_genre)); printf("%s\n",ptr->sz_genre); return 0; }
-
Hi
dankeschön. Aber hab gerade aber herausgefunden, das es noch einfacher geht.
char *genre_liste(int);einfach die Funktion als Zeiger definieren.
mfg
Bernd
-
Was ist da einfacher? Das ist genau dasselbe....
-
Ok, sagen wirs so: Für mich ist es einfacher zu verstehen