奇怪的错误,将字符与字符串进行比较(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 == "取消" == 如上所述。此外,pchar"cancel"char*,它们不会相等。你的意思是p 成为char* 吗?您应该使用 strcmp 然后比较字符串。 该代码注定会出现未定义的行为。您正在通过 %s 将一串字符读入 single char。只有一个元素的空间(它更好是空字符终止符),这意味着scanf只有在读取的结果字符串没有长度时才有效。 【参考方案1】:

这里有很多问题。

    要比较值,请使用== 而不是=。 逻辑 or 运算符是 || 而不是 |char p 为单个字符腾出空间。您不能将多字符密码存储在 char 变量中。你需要一个字符串。 您无法将字符串与== 进行比较。 p == *PASSWORD1 不起作用。我会让你弄清楚什么是有效的。很容易搜索。

【讨论】:

【参考方案2】:

使用哪个函数比较字符串取决于编译器本身抛出的错误。 (查找您发布的第 2 号错误函数并在 Google 上查找。)

【讨论】:

以上是关于奇怪的错误,将字符与字符串进行比较(p == "cancel")的主要内容,如果未能解决你的问题,请参考以下文章

如何将双引号字符串与字符进行比较?

字符串哈希

将字符串与容差进行比较

C ++将字符串的索引与另一个字符串进行比较?

将字符串与Hangman项目中的char进行比较时的编译错误

将变量与字符串 bash 进行比较