Θε□ 2021-12-15 07:23 采纳率: 100%
浏览 52
已结题

刚刚入坑,size_t提示警告

看视频的代码 自己写过来就出警告 视频中没什么问题
#include<stdio.h>
#define max 3
int main()
{
    int array[] = { 1,2,3 };
    int i=0 ;
    for (size_t i = 0; i < max; i++)
    {
        printf("array[%d] = %d\n", i, array[i]);
    }
    return 0;
}
结果没问题,就是出现警告.

警告 C6246 “i”的局部声明遮蔽了外部作用域中具有相同名称的声明
警告 C6340 符号不匹配: 已将“unsigned int”作为 Param(2) 传递,但需要使用一些 signed 类型来调用“printf”。

我的解答思路和尝试过的方法

看官方解释没看懂
我自己找出来只要不用size_t 声明变量 就不会出现警告

我想要达到的结果

目前就是结果不重要,就像搞清楚为什么出这个警告,之前第一次写完是没有的,怕以后经常出现类似问题请各位帮忙看看.
有点强迫症..

  • 写回答

2条回答 默认 最新

  • 关注

    第一个警告是说,for循环中的size_t i 跟第6行的 int i;变量名重复了,把第6行(或者for循环中的i,该第6行只改1处,改for循环的话需要改多处)该个名字即可。
    第二个警告是说,printf("array[%d] = %d\n", i, array[i]);这句话中,第二个参数 i 是unsigned int类型,使用%d(arrar[%d]这里 )来输出是不对的,因为unsigned int 需要用%u来输出,unsigned int的正整数 超出 signed int的正整数范围,用%d输出 unsigned int可能会出错。但是,你这里最大值是3,没什么影响,如果要消除这个警告,就把 arrar[%d] 改成 arrar[%u] 即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月15日

悬赏问题

  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作