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

char *ch2="abc";
printf("strlen(ch2)=%d",strlen(ch2)); 
---编译警告:
warning #2181-D: argument is incompatible with
corresponding format string conversion
printf("strlen(ch2)=%d",strlen(ch2));
^

后来,我定义一个变量
int a;
a=strlen(ch2);
printf("strlen(ch2)=%d", a); 
这样就没有警告了。

冉冉说
浏览 129回答 3
3回答

aluckdog

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

拉莫斯之舞

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

holdtom

strlen函数的返回值是个 unsigned int ,而%d是int格式输出,所以会有警告,用%u格式就不会有警告了:printf("strlen(ch2)=%u",strlen(ch2));
打开App,查看更多内容
随时随地看视频慕课网APP