Ostrzeżenie: powrót z niezgodnego typu wskaźnika w C
Poniższy kod generuje niekompatybilny błąd typu wskaźnika i ostrzeżenie: kontrolka osiąga koniec funkcji non-void w funkcji filename:
#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; }
}
Jestem nowy w tej branży, czy ktoś może mi pomóc z tym błędem?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Możesz na myśli zwrócić nowo wybraną linię , a także ewentualnie wypełnić ją danymi, które zostały odczytane za pomocą do oddzielnej . W takim przypadku musisz skopiować dane i zwrócić .
Byłoby to bardziej zwięzłe, prostsze i ogólnie lepiej czytane bezpośrednio w :
Zauważ, że to powiela rozmiar bufora z wywołania , czyli „zapach kodu”. Można to poprawić, ustawiając stałą lokalną w funkcji:
Mój ostatni kod ma również tę zaletę, że sprawdza zwracane wartości funkcji, które mogą się nie powieść. Zarówno alokacja pamięci ( ), jak i I/O ( ) mogą się nie powieść, dlatego należy sprawdzić zwracane przez nie wartości.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Więc w jednej ścieżce, jeśli zwrócisz „i1”, które jest wskaźnikiem int, który zdecydowanie nie jest wskaźnikiem znaku.
W drugiej połowie po prostu przechodzisz do końca funkcji, która nic nie zwraca.
Masz szczęście, że Twój kompilator ostrzega Cię o tym. Wielu domyślnie po prostu to ignoruje.
tak przy okazji, masz wyciek pamięci. Pobierasz pamięć dla dum, ale nigdy jej nie zwalniasz.