卡在数组和字符串中与strcmp c进行比较
卡在数组和字符串中与strcmp c进行比较 为什么它能工作?? 编译器在卡在数组和字符串中与strcmp c进行比较,c,arrays,if-statement,char,strcmp,C,Arrays,If Statement,Char,Strcmp,卡在数组和字符串中与strcmp c进行比较 为什么它能工作?? 编译器在if(strcmp(c,ch[i])==0{ #包括 #包括 #包括 int main(){ 字符ch[]=“asdfghjkl”; 字符c; int n=sizeof(ch)/sizeof(char); scanf(“%c”、&c); 对于(int i=0;istrcmp声明: int strcmp(常量字符*s1,常量字符*s2) strcmp需要字符串,但您正在尝试传递char 使用 我相信您的编译器应该抱怨您使用的
if(strcmp(c,ch[i])==0{
#包括
#包括
#包括
int main(){
字符ch[]=“asdfghjkl”;
字符c;
int n=sizeof(ch)/sizeof(char);
scanf(“%c”、&c);
对于(int i=0;istrcmp声明:
int strcmp(常量字符*s1,常量字符*s2)
strcmp需要字符串,但您正在尝试传递char
使用
我相信您的编译器应该抱怨您使用的strcmp不正确:您正在将两个字符传递给两个const char*
s,这肯定是一个UB。如果您的编译器通过抛出错误阻止您这样做,那就好了
strcmp
的原型是(在string.h
中)
由于您有两个字符,并且char
是基本类型,因此您可以直接比较它们:
if ( c == ch[i] )
strcmp
将两个字符串作为参数。您正在传递一个char
和一个字符串。编译器没有对此进行抱怨吗?读取。该函数用于比较字符串。您希望比较字符。c
的类型是char
(一个字符,而不是字符串).strcmp
需要char*
。也许你应该直接比较它们?c==ch[i]
请描述一下预期结果。strchr
有什么问题?这有什么问题?有人能解释一下它不是“UB”吗,这违反了允许的简单赋值形式的约束。当向函数传递参数时,“…参数被隐式转换为相应参数的类型,就像通过赋值一样”(6.5.2.2/7)。从char
到char*
不是有效形式。这意味着编译器必须给出诊断,否则不符合要求。
if (c == ch[i])
int strcmp(const char * s1, const char * s2);
if ( c == ch[i] )