Vsnprintf在我的嵌入式目标上崩溃为NULL

时间:2015-10-16 11:06:17

标签: c printf undefined-behavior

我正在尝试使用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)上,这正确打印"获取的数据为空"但是在我的设备上它会崩溃。

感谢任何帮助

1 个答案:

答案 0 :(得分:4)

1999年的C标准说:

  

7.1.4库函数的使用

     

1除非明确说明,否则以下各项陈述均适用   否则在下面的详细描述中:如果参数为   函数具有无效值(例如域之外的值)   函数,或程序地址空间外的指针,   或者是一个空指针,或指向不可修改存储的指针   相应的参数不是const限定的)或类型(后   促销)不是由具有可变数量的函数预期的   参数,行为未定义。

情况就是这样。毫无疑问,嵌入式C库选择不检测所有可能的错误情况以节省内存。