Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卡在数组和字符串中与strcmp c进行比较_C_Arrays_If Statement_Char_Strcmp - Fatal编程技术网

卡在数组和字符串中与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 使用 我相信您的编译器应该抱怨您使用的

卡在数组和字符串中与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

使用

我相信您的编译器应该抱怨您使用的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] )