奇怪的错误,将字符与字符串进行比较(p == "cancel")
Posted
技术标签:
【中文标题】奇怪的错误,将字符与字符串进行比较(p == "cancel")【英文标题】:Weird error, comparing a char to a string (p == "cancel") 【发布时间】:2015-08-29 03:26:52 【问题描述】:我正在尝试做一个基本的 if 语句,但我的字符串出现了这个奇怪的错误。
错误 1:
指针和整数的比较('int'和'char *')
错误 2:
与字符串文字的比较结果未指定(使用 strncmp 代替)
这里是所有函数的副本。
int logOn(int *par)
char p;
printf("Log into student records system\nEnter password or type cancel to leave\n>");
scanf("%s", &p);
if(p == *PASSWORD1 | p == *PASSWORD2 | p == *PASSWORD3)
*par = 2;
else if (p = "cancel")
*par = 3;
else
printf("\nIncorrect password try again\n");
return 0;
else if
语句行 (p = "cancel"
) 发生错误。
【问题讨论】:
p = "cancel" 将 "cancel" 分配给 p,而不是比较它。将其更改为 p == "取消"==
如上所述。此外,p
是 char
,"cancel"
是 char*
,它们不会相等。你的意思是p
成为char*
吗?您应该使用 strcmp
然后比较字符串。
该代码注定会出现未定义的行为。您正在通过 %s
将一串字符读入 single char
。只有一个元素的空间(它更好是空字符终止符),这意味着scanf
只有在读取的结果字符串没有长度时才有效。
【参考方案1】:
这里有很多问题。
-
要比较值,请使用
==
而不是=
。
逻辑 or 运算符是 ||
而不是 |
。
char p
为单个字符腾出空间。您不能将多字符密码存储在 char
变量中。你需要一个字符串。
您无法将字符串与==
进行比较。 p == *PASSWORD1
不起作用。我会让你弄清楚什么是有效的。很容易搜索。
【讨论】:
【参考方案2】:使用哪个函数比较字符串取决于编译器本身抛出的错误。 (查找您发布的第 2 号错误函数并在 Google 上查找。)
【讨论】:
以上是关于奇怪的错误,将字符与字符串进行比较(p == "cancel")的主要内容,如果未能解决你的问题,请参考以下文章