3

これは C での私のコード スニペットです。

      char *str = NULL;
      int len = -1;

      // Get length
      len = snprintf(NULL, 0, "[%d]", 2);

      // Allocate str
      str = (char *)malloc(len + 1);

      // Assign str
      snprintf(str, len, "[%d]", 2);

      assert(len == 3);

      // Display str
      puts(str);

これが表示されるはず[2]です。そしてlenこちらが3です。

ただし、このコードを実行すると表示されるのは[2

これはなぜですか?

4

2 に答える 2

0

関数 snprintf() は最大で len バイト (終端の null バイト ('\0') を含む) を str に書き込みます。

len は 3 に等しい (最初の呼び出し) ため、snprintf は 3 つの文字 (「[」、「2」、「\0」) のみを書き込みます。

于 2013-04-02T09:15:43.613 に答える