在Keil sprintf恼人的警告

时间:2017-06-22 12:06:03

标签: c keil

我正在尝试在Keil中使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <a class="payverlink" href="exbronzeregistrationform.php">Continue to registration</a> <button class="goldpac">Choose Plan</button> <button class="silverpac" onclick="silver()">Choose Plan</button> <button class="bronzepac" onclick="bronze()">Choose Plan</button>函数。但我有恼人的警告。让我用下面的示例代码部分解释我的警告。当我调试时,我得到;

  

警告:#167-D:类型&#34; uint8_t *&#34;的参数与&#34; char * restrict&#34;

类型的参数不兼容

它警告我关于格式类型的信息。

我知道sprintf功能不是一个好的解决方案,但我真的很想知道为什么这个警告会显示出来?

由于

sprintf();

2 个答案:

答案 0 :(得分:1)

修正警告:

您有两种选择:将str声明为char,或使用类型转换:

sprintf((char *) str, "%9ld", s_value);

优化代码

你有一个循环的唯一原因是用零初始化str数组。以下是以简单,可读的方式执行此操作的代码,无需代码开销:

char str[9] = {0};

修复您的代码:

文件摘录:

  

格式说明符遵循此原型:
  %[标志] [宽度] [精度] [长度]说明符
  ...
  宽度:
  最小要打印的字符数。如果要打印的值小于此数字,则结果将填充空格。即使结果较大,也不会截断该值。

这意味着您的代码最终将获得缓冲区溢出并将崩溃。使用snprintf

答案 1 :(得分:0)

uint8_tchar不一定是一回事。通常它的类型定义为unsigned char