我一直在使用以下链接: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 *数组中格式化单个字符串的最佳方法是什么,这样我可以在特定条目中包含变量的值?
答案 0 :(得分:1)
如果主要目的是将print与其他变量值一起添加,则让ERROR字符串保持不变。您可以在写入文件fp时添加其他值。
fprintf(fp, "%s: %d %d", ecodeName(ECODE_SAMPLE_ERR), myVarInt1, myVarInt2);