Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向Char*数组中的条目传递可变数量的参数_C_Error Handling_String Formatting - Fatal编程技术网

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

向Char*数组中的条目传递可变数量的参数,c,error-handling,string-formatting,C,Error Handling,String Formatting,我一直在使用以下链接:增强我正在处理的项目的当前错误日志记录 我的最终目标是生成一个枚举“错误类型”。我会将这些错误类型映射到一个char*的查找表,我可以用它来记录错误的更详细解释 这样,我将所有错误代码和相应的错误字符串放在一个中心位置,可以轻松地修改/查找消息和错误代码,而无需深入挖掘代码 作为PoC,我的头文件包含以下内容: typedef enum { ECODE_OK = 0, // OK ECODE_SAMPLE_ERR = 1, ECODE

我一直在使用以下链接:增强我正在处理的项目的当前错误日志记录

我的最终目标是生成一个枚举“错误类型”。我会将这些错误类型映射到一个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*数组中格式化单个字符串,以便在特定条目中包含变量值的最佳方式是什么?

如果主要目的是将print与其他变量值一起添加,请将错误字符串设置为常量。在写入文件fp时,只需添加附加值即可

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

您希望使用多少格式化字符串?也就是说,您将有多少不同类型的格式化字符串?这取决于错误。有些可能只是没有格式的字符串,例如,
“您已失去与设备的连接”
。其他变量可能有多个,例如,
“DAC%d、脉冲宽度%d和周期%d的当前激光设置导致无效激光功率%f”,var1、var2、var3、var4
。我想说的是,大多数人不需要错误,只有极少数人需要在字符串中插入5个以上的变量。我不明白。是调用fprintf(fp,“%s”,get_error_string(error_code))的实际日志函数。请原谅我更改了名称,我试图像您那样键入它,但我做不到。我想这两个链接可以帮助您:我希望您知道以下语句:
strerror(error)将返回合适的字符串。但是,对于特定于应用程序的错误,类似这样的代码:在代码中:
CommonWriteCdsLog(ellu-Critical,get-pFormatString(eFormat-CFFL-string),\uu-FILE-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu对我来说非常有效。是从格式字符串表中选择的“get_pFormatString()”,是从值的
枚举中选择的
ellu Critical
,以确定是否要记录消息。(cont)不幸的是,有时我需要将变量值插入字符串的不同部分,而不仅仅是将它们附加到末尾。最好保持错误代码的简单。这类错误代码应该是常量。我不明白你为什么要在这些字符串之间加上后缀。您可以将字符串更改为尽可能简单和通用。