22

私はこの警告について検索しましたが、誰もがコードに間違いを犯していましたが、これは私が理解できなかった非常に予想外のことです。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形式であると言うのですか?

4

3 に答える 3

37

マニュアルページを確認しましたか? 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.
于 2012-10-13T18:10:43.683 に答える
-1

「%d」の代わりに「%ld」を使用します。

printf("%ld", strlen(ch));
于 2021-04-15T03:26:16.243 に答える
-2

コードに追加(int)すると、エラーが修正されます。

printf("\nlength of string--%d\n", (int)strlen(x))
于 2015-02-12T18:46:32.357 に答える