【问题标题】:"Warning: multi-character character constant" when I used a C pointer“警告:多字符字符常量”当我使用 C 指针时
【发布时间】:2021-10-07 10:54:25
【问题描述】:

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

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

【问题讨论】:

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

标签: c if-statement pointers warnings


【解决方案1】:

一些帮助

status 未初始化。指针值是不确定的。请考虑使用 char 数组。

char *status; 

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

scanf("%s", status);

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

if (*status == 'time')`

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

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

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 2011-12-06
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多