C - strcmp () с отформатированными строками - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь сравнить строку с помощью strcmp (), но когда я пытаюсь сравнить отформатированную строку, она не будет работать, например:

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

Как сравнить отформатированноестроки в C?

1 Ответ

3 голосов
/ 16 июня 2019

Обозначение ("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 */
}
...