【问题标题】:C - strcmp() with formatted stringsC - 带有格式化字符串的 strcmp()
【发布时间】:2019-06-16 02:39:34
【问题描述】:

我正在尝试使用 strcmp() 比较字符串,但是当我尝试比较格式化字符串时,它不起作用,例如:

if(strcmp(buffer, ("Number %d", 4)) == 0)
{
    // do stuff
}

如何比较 C 中的格式化字符串?

【问题讨论】:

  • C 中没有格式化字符串。您可以使用snprintf 从格式创建字符串。

标签: c strcmp


【解决方案1】:

函数参数列表中的符号("Number %d", 4) 是分隔两个表达式的逗号运算符,第一个表达式 ("Number %d") 被求值(因为它的副作用——只有没有副作用,所以好的编译器可能会对此发出警告)并丢弃结果,然后计算第二个结果并将其作为参数传递给函数 - strcmp()

编译器应该抱怨 strcmp() 的参数 2 的类型不匹配; 4 不是可以传递给strcmp() 的字符串。如果你的编译器没有抱怨,你需要找出如何让它抱怨。

这可行:

char formatted[32];
snprintf(formatted, sizeof(formatted), "Number %d", 4);
if (strcmp(buffer, formatted)) == 0)
{
    /* do stuff */
}

【讨论】:

  • 请注意:这是预期的,但我们不知道 buffer 包含什么。
猜你喜欢
  • 1970-01-01
  • 2021-05-09
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
相关资源
最近更新 更多