为了账号安全,请及时绑定邮箱和手机立即绑定

后来,我定义一个变量,然后就没有警告了,为什么?

后来,我定义一个变量,然后就没有警告了,为什么?

C
冉冉说 2023-04-20 19:15:04
char *ch2="abc";printf("strlen(ch2)=%d",strlen(ch2)); ---编译警告:warning #2181-D: argument is incompatible withcorresponding format string conversionprintf("strlen(ch2)=%d",strlen(ch2));^后来,我定义一个变量int a;a=strlen(ch2);printf("strlen(ch2)=%d", a); 这样就没有警告了。
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

函数中,当传入参数的类型不符合的时候,如果不能自动转化,会给出错误信息;能转化则给出警告信息。strlen返回的是unsigned int类型的,和%d不符合,但可以转化。
后来没有了转为中间使用是int转换了, printf函数类型符合

查看完整回答
反对 回复 2023-04-23
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

#include<stdio.h>
#include<string.h>
int main()
{
char *ch2="abc";
printf("strlen(ch2)=%d",strlen(ch2));  
system("pause");  
}
我这样子可以啊 你用的是什么版本的编译器

查看完整回答
反对 回复 2023-04-23
?
holdtom

TA贡献1805条经验 获得超10个赞

strlen函数的返回值是个 unsigned int ,而%d是int格式输出,所以会有警告,用%u格式就不会有警告了:
printf("strlen(ch2)=%u",strlen(ch2));

查看完整回答
反对 回复 2023-04-23
  • 3 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信