"Suspicious pointer conversion" Warum??



  • Hallo,

    ich habe eine frage (ich weiss bin nicht grad der c++ burner^^)
    aber ich bekomm hier immer die meldung

    "Suspicious pointer conversion"

    und weiss nicht an was es liegt das Programm an sich läuft einmampfrei :p
    aber trotzdem stört mich die meldung und würde auch gern den Grund dazu wissen.

    string TBilderkopieren::getfileext(char *datei)
    {
     int max_path;
    
     char endung[10];
     int  stelle=0;
    
     max_path = strlen(datei);
     for(int i=0; i!=max_path; i++) //char durchlaufen
     {
      if(datei[i] == 46) //wenn punkt (d.h. die Endung beginnt
      {
       for(int j=i++; j!=max_path; j++) //endung durchlaufen
       {
        endung[stelle] = datei[j]; //ein Zeichen der endung kopieren
        stelle++;                  //Die stelle in der die endung gespeichetr wird
        endung[stelle] = '\0'; //Terminierung
        if(datei[j] == 0)  //wenn endung zuende
        {
    
         return endung;
        }
       }
      }
     }
    
     return endung;
    
    }
    

    für antworten währe ich sehr dankbar
    mfg
    Ristor



  • Hmh, hättest ja mal sagen können, in welcher Zeile diese Warnung ausgegeben wird. Ich rate mal:
    if(datei[j] == '\0')
    BTW. Hast Du Dich mal mit der Problematik auseinander gesetzt,wenn mehr als ein '.' im Dateinamen vorkommt?. Vllt die Schleife mit der ICV i von hinten durchlaufen doer entsprechende Stringsichfunktion verwenden.



  • Vorab: Warum nutzt Du nicht ExtractFileExt()? Warum verwendest Du C-Strings, statt std::string, oder AnsiString?

    Die Fehlermeldung ist in diesem Fall (meiner Meinung nach) nicht ganz richtig, da endung 'nur' einen Zeiger auf das erste Zeichen des C-Strings darstellt. Wenn Du statt dessen char* endung = new char[xx] verwenden würdest, würde die Fehlermeldung verschwinden.

    ABER: Grundsätzlich ist die Vorgehensweise gefährlich. Sowohl endung, als auch das temporäre string-Objekt des Rückgabewertes verlieren mit Beendingung der Funktion ihre Gültigkeit. Du musst den Ergebnisstring in der aufrufenden Funktion zwingend kopieren, sonst ist der Zustand unedefiniert.

    @witte: Der Fehler sollte in den Zeilen mit den return-Anweisungen auftreten.



  • Danke dir für die schnelle antwort.

    die meldungen kommen bei den beiden returns

    Naja mit dem 2 . hab ich mich im moment noch nicht auseinandergesetzt. ist auch immoment belanglos da die Dateien immer *.svu heissen ^^

    /Edit: Ich benutz nicht ExtractFileExt() weil ich noch viel üben muss da ich ja noch so zeimlich ein "Blutiger Anfänger" bin. Aber danke dir jetzt ist ist die Meldung vorerst weg und ich hab schon gesehen das ich mich noch bissl damit beschäftigen muss was ich an Deklarationen verwenden muss/soll.

    mfg


Log in to reply