C - 带格式化字符串的 strcmp()
C - strcmp() with formatted strings
我尝试使用 strcmp() 比较字符串,但是当我尝试比较格式化字符串时,它不起作用,例如:
if(strcmp(buffer, ("Number %d", 4)) == 0)
{
// do stuff
}
如何在 C 语言中比较格式化字符串?
函数参数列表中的符号 ("Number %d", 4)
是分隔两个表达式的逗号运算符,第一个表达式 ("Number %d"
) 被求值(因为它的 side-effects - 仅没有 side-effects 所以一个好的编译器可能会警告)并且结果被丢弃,第二个结果被评估并作为参数传递给函数 — strcmp()
.
编译器应该抱怨 strcmp()
的参数 2 类型不匹配; 4
不是可以传递给 strcmp()
的字符串。如果您的编译器没有报错,您需要了解如何让它报错。
这可行:
char formatted[32];
snprintf(formatted, sizeof(formatted), "Number %d", 4);
if (strcmp(buffer, formatted)) == 0)
{
/* do stuff */
}
我尝试使用 strcmp() 比较字符串,但是当我尝试比较格式化字符串时,它不起作用,例如:
if(strcmp(buffer, ("Number %d", 4)) == 0)
{
// do stuff
}
如何在 C 语言中比较格式化字符串?
函数参数列表中的符号 ("Number %d", 4)
是分隔两个表达式的逗号运算符,第一个表达式 ("Number %d"
) 被求值(因为它的 side-effects - 仅没有 side-effects 所以一个好的编译器可能会警告)并且结果被丢弃,第二个结果被评估并作为参数传递给函数 — strcmp()
.
编译器应该抱怨 strcmp()
的参数 2 类型不匹配; 4
不是可以传递给 strcmp()
的字符串。如果您的编译器没有报错,您需要了解如何让它报错。
这可行:
char formatted[32];
snprintf(formatted, sizeof(formatted), "Number %d", 4);
if (strcmp(buffer, formatted)) == 0)
{
/* do stuff */
}