sprintf для объединения форматов с использованием переменной - PullRequest
0 голосов
/ 06 июня 2019

Я могу использовать макрос для объединения строк, используя sprintf, как показано ниже:

#define ATTR_FORMAT "\"%s\":\"%s\""
#define ATTR_FORMAT_SET "\"%s\":[%s]"

sprintf(demoStr, "{" ATTR_FORMAT "}", "Hello", "world");
printf("demoStr=%s\n", demoStr);

Я получил правильный вывод: demoStr={"Hello":"world"}.

но когда я назначаю макрос переменной, как показано ниже:

#define ATTR_FORMAT "\"%s\":\"%s\""
#define ATTR_FORMAT_SET "\"%s\":[%s]"

const char *fmt = NULL;
int iTest = 1;
if (iTest == 1) {
    fmt = ATTR_FORMAT;
} else {
    fmt = ATTR_FORMAT_SET;
}

sprintf(demoStr, "{" fmt "}", "Hello", "world");
printf("demoStr=%s\n", demoStr);

Я ожидаю выход demoStr={"Hello":"world"}.

Но когда я скомпилировал код, используя gcc, я получил ошибку ниже:

`error: expected ')' before 'fmt'`

Как можно решить эту проблему, кто-нибудь может дать мне подсказку или показать какой-нибудь код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...