2016-10-25 6 views
-1

Aは、LinuxバージョンcBufferがfprintfの長さ制限はありますか?

int bfnAddOutputFile(FILE *fpOut, char *cBuffer){/**/ 

     fprintf(fpOut, "%s",cBuffer); 

     //code 

     return (TRUE); 
    } 

ときのように、charへのポインタである2.6.32-431.11.2.el6.x86_64

fprintf(fpOut, "%s",cBuffer); 

に、ANSIコードC次を有します関数fprintfは、コアが、それは関数fprintfにそれを送ることができます文字のmaximunの長さがあり

Program received signal SIGSEGV, Segmentation fault. 
    0x00000038b2e6723e in fputs() from /lib64/libc.so.6 

ダンプ生成し実行し、それがある場合、その数は何ですか?

+0

は 'cBuffer' ASCIIZ文字列ですか? –

+1

なぜあなたはそれが長さの問題だと思いますか、なぜあなたはクラッシュするのか不明ですか? – 2501

+1

この関連記事[printf/fprintf c99に従って最大サイズ](http://stackoverflow.com/questions/8119914/printf-fprintf-maximum-size-according-to-c99)を見てください。 –

答えて

3

cBufferにはおそらくヌルターミネータが含まれていないため、fprintfはメモリ境界を超えます。 C-文字列を出力している間、彼らはNULL終止符'\0')を発生し、そうでない場合は上に行くことができたときに、彼らはが属していないことを出力し、メモリの一部を試すまで

は、printf -family機能は、のみ停止しますをプログラムに追加すると、セグメント化エラーが発生します。

+0

OPの場合ではありませんが、 '[f | s] printf'はフィールド幅が与えられていれば文字列ターミネータに遭遇する前に止めることができます。 –

+0

cBufferが小さすぎたため、ヌルターミネータにfprintfが含まれていませんでした。 –

+0

@JohnBollingerあなたは_field_幅ではなく_precision_を意味すると思われます。 – chux

関連する問題