我刚刚了解了C,我知道这是一个基本问题,但我无法弄清楚如何解决这个问题.例如,我有一行
printf("value :%d\n",var.value);
Run Code Online (Sandbox Code Playgroud)
格式不适合,因为它显示下面的错误
*格式'%d'需要类型'int',但参数3的类型为'uint32_t*'
我已经检查了cplusplus的参考:cplusplus print ref
但它没有明确说明如何打印类型为uint32_t*(同样uint16_t)的值.
任何解释都将非常感激.
nos*_*nos 16
您试图将指向uint32_t的指针打印为int.你必须做两件事:
格式化uint32_t的正确方法是使用宏PRIu32,它将字符串扩展为格式字符.
就是这样
printf("%"PRIu32"\n", *var.value);
Run Code Online (Sandbox Code Playgroud)
您可能在一个通用平台上,其中unsigned int与uint32_t相同,在这种情况下您可以这样做:
printf("%u\n", *var.value);
Run Code Online (Sandbox Code Playgroud)
(注意,%u代替使用%d的代码,%u代表unsigned int,而%d代表signed int)
如果你想使用指针%p,
printf("value :%p\n",var.value);
Run Code Online (Sandbox Code Playgroud)
如果要使用解除引用的unsigned int值
printf("value :%u\n",*(var.value));
Run Code Online (Sandbox Code Playgroud)
这假设value字段var实际上是指向的指针uint32_t- 这就是警告文本所暗示的内容.
很高兴你在这里得到一个警告 - printf不是类型安全的,所以经常误用API只会导致突然的运行时故障(例如崩溃或更糟,未检测到的内存损坏).