4

同様の投稿に従ってコードを変更しましたが、警告は引き続き生成されます。

$ g++ ncfile.c -o ncfile -g -lnetcdf

ncfile.c: In function ‘int main(int, char**)’:
ncfile.c:363: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
ncfile.c:363: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
ncfile.c:364: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’
ncfile.c:364: warning: format ‘%d’ expects type ‘int’, but argument 4 has type ‘size_t’

そのブロックの 363 行目と 364 行目あたり:

  for(i = 0; i < ndimsp; i++) {
    char * temp_name;
    size_t temp_len;
    temp_name = (char *)malloc(sizeof(char) * 20);
    nc_inq_dim(cid, dimids[i], temp_name, &temp_len);
    dimlens[i] = temp_len;
    if(dimids[i] == unlimdimidp) printf("\t\t%d %s   \tlength: %d (UNLIMITED)\n", i, temp_name, temp_len);
    else printf("\t\t%d %s   \tlength: %d\n", i, temp_name, temp_len);
    total_records *= temp_len;
    free(temp_name);
  }

警告を取り除くにはどうすればよいですか。それは結果に有害ですか?

ありがとう、

マイケル

4

1 に答える 1

7

z 修飾子を使用してみてください。基本的に、size_t 値の %zu です。

これが結果になります:

printf("\t\t%d %s   \tlength: %zu\n", i, temp_name, temp_len);

この質問を見てください:

printf ファミリを使用して size_t 変数を移植可能に出力するにはどうすればよいですか?

于 2013-04-28T22:12:27.763 に答える