1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み] ポインタからキャストを使わずに整数を返す [-Wint-conversion] 戻り値の候補を作る

2022-01-11 11:38:16

質問内容

C言語のコードは次のとおりです。

char getkey (int minimo, int maximo, int alphalen, int index, char alpha[])  
{  
    int cociente, residuo, cont;
    int i = 0;
    char cand[maximo+1];
    char candidate[maximo+1];

    while (index != 0)
    {
        cociente = index / alphalen;
        residuo = index%alphalen;
        cand[i] = residuo;
        index = cociente;
        i+=1;
    }

    for (cont=i-1; cont>=0; cont--)  
    {   
        int pos = cand [cont];
        candidate[i] = alpha[pos];      
    }
    return candidate;
}

コンパイルすると、警告が表示されます。

return makes integer from pointer without a cast

return candidate;

解決方法は?

ローカル変数 candidate はcharの配列です。このとき

return candidate;

の場合、charへのポインタを返します。(これはC言語の配列とポインタの非常に密接な関係によるもので、まだ知らない人は勉強しなければなりません)。しかし、あなたは自分の関数が getkey は char を返しますが、char へのポインタではありません。

関数の戻り値を型と一致させる必要があります。そのためには return ステートメントを使用して、単一の文字が返されるようにします。もしこの関数が文字列全体を返すようにしたければ、その宣言を次のように変更します。 char *getkey() しかし、その場合、このメソッドを使用するために candidate の配列になります。

警告の意味はこうです。あなたはポインターを返そうとしました。この関数は文字を返すことになっており、それは小さな整数として表現されます。コンパイルは、あなたが本当にそうしたい場合に備えて、ポインタを整数に変換しようとしますが、通常それは良いアイデアではないので、あなたに警告を発します。実際、この場合、警告は「たぶん間違えた」と教えてくれる。