2016-04-29 24 views
-2

Hallo, ich habe den untenstehenden Code und aus irgendeinem Grund bekomme ich den Fehler und kann nicht funktionieren, warum.Konvertieren eines char * in int

warning: return makes integer from pointer without a cast 

Der Code ich habe, ist:

long convertToInt(char *convert) { 
     char *p = convert; 
     while(*p){ 
      if(isdigit(*p)) { 
       long val = strtol(p, &p, 10); 
       return val; 
      } else { 
       p++; 
      } 
     } 
    return NULL; 
} 
+0

Und warum würden Sie einen Zeiger auf eine ganze Zahl konvertieren? – Olaf

+7

Es gibt einen Code-Geruch, es ist ein 'convertToInt', was ein int bedeutet, nicht lang, was irreführend ist. – t0mm13b

+0

Können Sie zeigen, wie Sie die Funktion 'convertToInt' verwenden möchten? Die Antwort kann davon abhängen. –

Antwort

2

NULL ist ein Zeiger, keine Ganzzahl. Sie kann als #define implementiert werden, die auf 0 (die Ganzzahlkonstante) oder ((void *) 0) die Nullzeigerkonstante erweitert. Wenn Sie einen Wert zurückgeben möchten, der "ein Fehler ist aufgetreten" bedeutet, möchten Sie wahrscheinlich eine Integer-Konstante zurückgeben. Die Werte 0 und -1 sind traditionell.

Noch besser ist es, einen booleschen Statuswert für Erfolg/Fehler zurückzugeben und den Wert über ein Zeigerargument zurückzugeben: bool_t convertToInt(const char *s, long *value). Ein Beispiel finden Sie in der Standardbibliotheksfunktion strtol.

+1

'bool_t'? Ich nehme an, du meinst 'bool'. – unwind

+1

Ja, bool, nicht bool_t. –

1

Ihre funtion kehrt long. So die Rückkehr ändern Aussage zu:

return 0L; 

Eine mögliche Definition von NULL ist (void *)0, die zu long umgewandelt wird, wenn Sie return.

0

Das Problem ist hier:

return NULL; 

wo Sie NULL zurück, aber der Rückgabetyp der Funktion ist long.


Außerdem Ihre Funktion ist convertToInt() genannt, aber es gibt ein long, die ein convertToLong() Funktionsnamen bedeuten würde.

1

Der richtige Code wäre, convert unter der Annahme ist eine Zeichenkette mit den Ziffern:

long convertToLong(char *convert) { 
    long val = 0L; 
    char *p = convert; 
    while (isdigit(*p)){ 
     val = val * 10 + (*p - '0'); 
     p++; 
    } 
    return val; 
}