当我使用 C 指针时出现“警告:多字符字符常量”

"Warning: multi-character character constant" when I used a C pointer

提问人:Maisie Li 提问时间:8/2/2021 最后编辑:mtmMaisie Li 更新时间:8/2/2021 访问量:386

问:

这是我编写的一个函数的一小部分,一旦有人输入“时间”,它就会打印一个句子。但是当我编译它时,它说“警告:多字符字符常量”。我尝试使用双引号,上面写着“警告:指针和整数之间的比较”。现在,我很困惑。你能帮我吗?谢谢!!!

char *status; 
scanf("%s", status);
if (*status == 'time')`
    {
        printf("The time of the meet-up is 4 p.m.");
    }
c if 语句 指针 警告

评论

4赞 kaylum 8/2/2021
你已经把很多错误打包到这短短的代码中。1. 是一个未初始化的指针,你不能用 写入它。声明为数组或使用 动态分配。2. 用于字符和字符串。所以应该是 3。 不是在 C 语言中比较字符串的方式。statusscanfchar status[64]malloc'""time"==strcmp(status, "time") == 0
0赞 Cheatah 8/2/2021
你很困惑,因为你可能已经习惯了用 C 以外的其他语言编程。您误会了使用 时自动分配的内存。这不会发生。此外,必须对字符串使用双引号。您可以使用 比较字符串,不能为此使用运算符。从基础开始学习 C,而不是假设它的工作方式类似于 Python。statusscanfstrcmp==
3赞 kaylum 8/2/2021
建议你暂停编码,读一本好的C书或教程。
1赞 klutt 8/2/2021
您是否查看了具有相同警告的其他问题?
0赞 Yusuf 8/2/2021
在这一行的末尾,你也有一个反引号字符,但是的,我同意@kaylum你需要花时间正确地学习 C 语言,而不仅仅是让它飞翔if (*status == 'time')`

答:

1赞 chux - Reinstate Monica #1

一些帮助

status未初始化。指针值不确定。考虑一个数组。char

char *status; 

将不确定的值传递给 是不好的。在没有宽度限制的情况下使用是不好的。使用或宽度限制。scanf()"%s"fgets()

scanf("%s", status);

'time'不是斯特林。更有可能你想要. 这里比较指针。要比较字符串内容,请研究 .”time”==strcmp()

if (*status == 'time')`

最好将 a 附加到输出中。’\n’

    {
        printf("The time of the meet-up is 4 p.m.");
    }