我已经阅读了关于堆栈溢出的几个类似问题,但是在这种情况下,我找不到能够帮助我理解此警告的问题。我正处于尝试学习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传递给您的函数即可。

10-05 23:36