Передача переменного количества аргументов записи в массиве Char * - PullRequest
0 голосов
/ 25 апреля 2018

Я использовал следующую ссылку: https://www.embedded.com/design/programming-languages-and-tools/4215552/Seventeen-steps-to-safer-C-code, чтобы улучшить ведение журнала текущих ошибок проекта, над которым я работаю.

Моя конечная цель - создать перечисление "тип ошибки".Я бы сопоставил эти типы ошибок с таблицей поиска char *, которую я мог бы использовать для записи более подробного объяснения того, что это за ошибка.

Таким образом, у меня есть все мои коды ошибок и соответствующие строки ошибок в центральном месте, и я могу легко изменять / искать сообщение и код ошибки без необходимости копаться в коде.

Как PoC, мой заголовочный файл содержит следующее:

typedef enum {
    ECODE_OK = 0,         // OK
    ECODE_SAMPLE_ERR = 1,
    ECODE_LAST
} myEcodes;

char * ecodeMap[ECODE_LAST+1];
char * ecodeName(myEcodes err);

Моя реализация в C заголовка включена ниже:

char * ecodeMap[ECODE_LAST+1] =
{
    "No error to report",
    "Example Error Code - Invalid Value",
    "Last ecode place holder"
};

char * ecodeName(myEcodes err)
{
    return (char *) eyescanEcodeMap[err];
}

Мой вопрос таков:скажем, у меня есть следующий фрагмент кода для регистрации ошибки, с которой я столкнулся:

fprintf(fp, "%s", ecodeName(ECODE_SAMPLE_ERR));

Что если я хочу, чтобы ECODE_SAMPLE_ERR фактически содержал отформатированную строку, такую ​​как

"Example Error Code - Invalid Values: %d %d", myVarInt1, myVarInt2

вместо просто

"Example Error Code - Invalid Value"

Как лучше всего иметь возможность форматировать отдельные строки в моем массиве char * так, чтобы я мог включать значение переменных в определенные записи?

1 Ответ

0 голосов
/ 25 апреля 2018

Если основной целью является добавление print вместе с другими значениями переменных, пусть строка ERROR будет постоянной. Вы можете просто добавить дополнительные значения при записи в файл fp.

fprintf(fp, "%s: %d %d", ecodeName(ECODE_SAMPLE_ERR), myVarInt1, myVarInt2);
...