将可变数量的参数传递给Char *数组中的条目

时间:2018-04-25 01:33:35

标签: c error-handling string-formatting

我一直在使用以下链接: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 :(得分:1)

如果主要目的是将print与其他变量值一起添加,则让ERROR字符串保持不变。您可以在写入文件fp时添加其他值。

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