格式’%d’期望类型为’int’的参数,但参数2具有类型’size_t'[-Wformat] - 代码日志

格式’%d’期望类型为’int’的参数,但参数2具有类型’size_t'[-Wformat]

那么我已经搜索了这个警告,他们在代码中确实有一些错误,但这里是一件非常意想不到的事情,我无法想象。我们期望strlen(x)是一个整数,但这个警告告诉我什么?怎么可能strlen是int。

In function ‘fn_product’:
line85:3:warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat]

我的代码在fn_product –

char *fn_product (char x[],char y[]){
  if (strlen(x)==1)    // line85
    printf("\nlength of string--%d\n", strlen(x));
  /*other code*/
}

请帮助。不能strlen(x)是int.Why为什么说是格式size_t?

你检查了man page吗? strlen(3)返回size_t。使用%zu来打印它。

如下面的评论所述,clang有时候会找到更好的错误信息。事实上,cl ang的警告正是这样的事情:

example.c:6:14: warning: format specifies type 'unsigned int' but the argument
      has type 'size_t' (aka 'unsigned long') [-Wformat]
    printf("%u\n", strlen("abcde"));
            ~^     ~~~~~~~~~~~~~~~
            %zu
1 warning generated.
http://stackoverflow.com/questions/12875571/format-d-expects-argument-of-type-int-but-argument-2-has-type-size-t-w

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:格式’%d’期望类型为’int’的参数,但参数2具有类型’size_t'[-Wformat]