1. ホーム
  2. c

[解決済み] 引数を渡すと、キャストせずに整数からポインタを作成します。

2022-02-15 20:31:53

質問

Stack Overflowで同様の質問にいくつか目を通しましたが、今回の警告を理解するのに役立つ質問を見つけることができません。私はC言語を学び始めて最初の週なので、私が理解不足でStack Overflowの他の場所で明白な答えを見逃していたら、申し訳ありません。

以下のような警告と注意書きが表示されるのですが。

 warning: passing argument 2 of ‘CheckIfIn’ makes pointer from integer without a cast [enabled by default]
 if(CheckIfIn(letter, *Vowels) ){
 ^

 note: expected ‘char *’ but argument is of type ‘char’
 int CheckIfIn(char ch, char *checkstring) {

このコードをコンパイルしようとしたとき。

#include <stdio.h>
#include <string.h>
#define CharSize 1 // in case running on other systems

int CheckIfIn(char ch, char *checkstring) {
    int string_len = sizeof(*checkstring) / CharSize;
    int a = 0;

    for(a = 0; a < string_len && checkstring[a] != '\0'; a++ ){

        if (ch == checkstring[a]) {
            return 1;
        }
    }
    return 0;
}


// test function    
int main(int argc, char *argv[]){
    char  letter = 'a';
    char *Vowels = "aeiou";     

    if(CheckIfIn(letter, *Vowels) ){
        printf("this is a vowel.\n");
    }

    return 0;
}

解決方法は?

Vowelschar* , *Vowels は単なる char , 'a'. char は自動的に整数に昇格し、コンパイラは暗黙のうちにポインタに変換することを許可しています。 しかし,そのポインタの値は Vowels これは、文字'a'の整数エンコーディングに等しいアドレスで、ほぼ全世界で0x61となります。

を渡すだけです。 Vowels を関数に追加します。