Warnung: return from incompatible pointer type C
Den code unten erzeugt eine incompatible pointer type Fehler-und Warnung: Steuern Sie erreicht Ende von nicht-void function in der Funktion mit dem Namen:
#include <stdio.h>
#include <stdlib.h>
int quit;
char *filename(int *);
int main ()
{
filename(&quit);
return 0;
}
char *filename(int *i1)
{
char input[16];
char *dum=(char*)malloc(16*sizeof(char));
if (dum==NULL){
printf("Memory could not be allocated \n");
}
else {
printf("Memory was allocated – remember to free\n \n");
*i1=1;
fputs("Input filename = ", stdout);
fflush(stdout);
fgets(input,sizeof(input),stdin);
printf("Filename = \"%s\"\n",input);
return i1;
}
}
Ich bin neu hier, kann mir jemand helfen bei diesem Fehler?
Ihre
Eigentlich sollte die Frage sein: warum nicht
main
Funktionsaufrufe filename
ohne mit der return-Wert, also warum die Funktion brauchen, um etwas zurückzugeben?Eigentlich sollte die Frage sein: warum nicht
main
mit der return-Wert? Drucken Sie, "denken Sie daran" kostenlos", aber dann nie frei.InformationsquelleAutor Sarah Wishart | 2012-10-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ja? Die Funktion deklariert ist zurück
char *
, aber Sie kehren zurücki1
was ist das input-argument und hat den Typint *
.Sie bedeuten könnte, gibt die neu zugewiesenen string
dum
, und vielleicht auch füllen Sie es mit den Daten, die gelesen wurde, mitfgets()
auf die separate character-arrayinput
. In diesem Fall, Sie brauchen, um die Daten zu kopieren über, und zurückdum
.Wäre es übersichtlicher, einfacher, und im Allgemeinen besser zu Lesen direkt in
dum
:Beachten Sie, dass diese Duplikate die Größe des Puffers vom
malloc()
nennen, das ist ein "code smell". Dies kann verbessert werden, indem es eine lokal-Konstante Funktion:Meine letzteren code hat auch den Vorteil, dass es prüft, Rückgabewerte von Funktionen, die fehlschlagen können. Beide memory allocation (
malloc()
) und I/O (fgets()
) scheitern kann, so müssen Sie überprüfen Ihre Werte zurückgeben.InformationsquelleAutor unwind
Zusätzlich zu entspannen, hat gesagt, man sollte etwas zurückgeben, nachdem die Linie
printf("Memory could not be allocated \n");
InformationsquelleAutor Ed Heal
Gut, Erstens, Ihre Einrücken ist erschreckend. Reindenting das macht es ein wenig klarer, was Los ist:
So, in einem Pfad, der, wenn Sie zurückkehren, 'i1', die einen int-pointer, der definitiv nicht ein char-Zeiger.
In der anderen Hälfte, die man einfach bis zum Ende der Funktion, die nichts zurückgibt.
Du Glück und dein compiler warnt Sie diese. Eine Menge, standardmäßig, einfach ignorieren.
als ein beiseite, du hast ein Speicherleck. Sie malloc Speicher für dum, aber nie frei.
InformationsquelleAutor Tom Tanner