2016-04-29 25 views
-2

こんにちは私は以下のコードを持っています。何らかの理由でエラーが発生していて、なぜうまくいかないようです。char *をintに変換する

warning: return makes integer from pointer without a cast 

私が持っているコードは次のとおりです。

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

そして、なぜあなたは整数へのポインタを変換したいのでしょうか? – Olaf

+7

コード違反があります。これは 'convertToInt'です。これはint型であり、long型ではありません。誤解を招きます。 – t0mm13b

+0

'convertToInt'関数の使い方を教えてください。答えはこれに依存するかもしれません。 –

答えて

2

NULLは整数ではなくポインタです。 nullポインタ定数を0(整数定数)または((void *)0)に展開する#defineとして実装できます。 「エラーが発生しました」という意味の値を返す場合は、おそらく整数定数を返す必要があります。 0と-1の値は伝統的です。

成功/失敗のブール値のステータス値を返し、ポインタの引数:bool_t convertToInt(const char *s, long *value)で値を返しても良いです。例については、標準ライブラリ関数strtolを参照してください。

+1

'bool_t'?私はあなたが 'ブール'を意味すると思います。 – unwind

+1

はい、bool、bool_tではありません。 –

1

あなたの目的球はlongを返します。だから、return文を次のように変更しますNULL

return 0L; 

一つの可能​​な定義はlongあなたreturnに変換されている(void *)0です。

0

問題はここにある:

return NULL; 

あなたはNULLを返しますが、関数の戻り値の型はlongです。


またあなたの関数はconvertToInt()という名前が、それはconvertToLong()関数名を暗示するlongを返しています。

1

適切なコードはconvertは数字の文字列であると仮定すると、次のようになります。

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