我正在尝试使用vsnprintf格式化嵌入式主板上的日志数据(基于arm的主板)。
下面是我的日志打印的代码
#define Max_log_len 1024
char logBuf[Max_log_len+1] = { 0 };
printMessage(const char* Format,...)
{
va_list logList;
va_start(logList, Format);
vsnprintf(logBuf , Max_log_len,Format, logList);
va_end(logList);
sendMessageto(logBuf);
}
如果我的数据为字符串格式为NULL,我的程序在vsnprintf崩溃 以下是案例的样本。
char *dData = NULL;
printMessage("The Obtained data is [%s]",dData);
在linux(我的PC)上,这正确打印"获取的数据为空"但是在我的设备上它会崩溃。
感谢任何帮助
答案 0 :(得分:4)
1999年的C标准说:
7.1.4库函数的使用
1除非明确说明,否则以下各项陈述均适用 否则在下面的详细描述中:如果参数为 函数具有无效值(例如域之外的值) 函数,或程序地址空间外的指针, 或者是一个空指针,或指向不可修改存储的指针 相应的参数不是const限定的)或类型(后 促销)不是由具有可变数量的函数预期的 参数,行为未定义。
情况就是这样。毫无疑问,嵌入式C库选择不检测所有可能的错误情况以节省内存。