私はこの警告について検索しましたが、誰もがコードに誤りがありましたが、ここでは私が理解できなかった非常に予期しないものがあります。 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であるべきではありません。なぜそれがsize_t形式であると言うのですか?
man page を確認しましたか? strlen(3)
はsize_t
を返します。印刷するには%zu
を使用してください。
以下のコメントで述べたように、 clang は、より適切なエラーメッセージを見つけるのに役立つことがあります。この場合のclangの警告は、実際には非常に優れています。
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.
コードにint()
を追加すると、エラーが修正されます:)
printf("\nlength of string--%d\n", (int)strlen(x))