5

snprintf 関数と混同しています。まず第一に、stdio.hの下のターボCバージョンコンパイラで関数snprintfを見つけられませんでした.次に、GNUコンパイラでは、バッファサイズがフォーマットされた文字列よりも小さい場合、snprintfは-1を返しますが、文字数を返す必要があります.バッファーサイズが十分に大きい場合に表示されます。次のソースがあります:

#include<stdio.h>
int main()
{
  char str[100];
  int numchar = snprintf(str,2,"ello jdj");
  printf("%d\n",numchar);
  return 0;
}

私がこれまでsnprintfについて知っているように、このコードは8を出力するはずです。しかし、私のGNUコンパイラでは-1を返しています。背後にある事実は何ですか?

4

1 に答える 1

5

古いバージョンのglibcを使用しているようです。のマニュアルページからsnprintf

関数snprintf()およびvsnprintf()のglibc実装は、C99標準に準拠しています。つまり、glibcバージョン2.1以降、上記のように動作します。glibc 2.0.6までは、出力が切り捨てられたときに-1を返していました。

于 2012-06-05T09:24:16.373 に答える