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 😉


Anmelden zum Antworten