Обозначение ("Number %d", 4)
внутри списка аргументов функции является оператором запятой, разделяющим два выражения, первое из которых ("Number %d"
) оценивается (для его побочных эффектов - только побочных эффектов нет, поэтому хороший компилятор может предупредить об этом) и результат отбрасывается, а второй из них оценивается и передается в качестве аргумента функции - strcmp()
.
Компилятор должен жаловаться на несоответствие типов для аргумента 2 strcmp()
; 4
не является строкой, которая может быть передана в strcmp()
. Если ваш компилятор не жалуется, вам нужно выяснить, как заставить его жаловаться.
Это будет работать:
char formatted[32];
snprintf(formatted, sizeof(formatted), "Number %d", 4);
if (strcmp(buffer, formatted)) == 0)
{
/* do stuff */
}