我已经阅读了关于堆栈溢出的几个类似问题,但是在这种情况下,我找不到能够帮助我理解此警告的问题。我正处于尝试学习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;
}
最佳答案
Vowels
是char*
,*Vowels
只是char
,“ a”。 char
会自动提升为整数,您的编译器允许将其隐式转换为指针。但是指针值将不是Vowels
,它的地址几乎等于字符'a'的整数编码,即0x61。
只需将Vowels
传递给您的函数即可。