• 締切済み

sprintfの障害

C言語のコーディングの質問です。 以下のロジックを見てください。 ========================================= char [12] strA double dblA dblA = 1000 sprintf(strA , "%06.0f", dblA / 1000) ========================================= 上記のロジックを処理すると、結果が必ず ”-00001”となります。 他の行にも同じようなロジックを記述しているのですが 上記の現象があこるロジックの行の時のみ 発生します。 他の処理がメモリを潰しているのかと思い いろいろ調査してみたのですが、それらしき 異常箇所は見受けれれません。また、コンパイラ についても異常はありませんでした。 デバック実行で変数「strA」にセットされる 値をみるとaprintfの処理直後に"-00001"が セットされるのは実証済です。 このような現象が発生することはあるのでしょうか? 原因、対応方法についてご教示お願いいたします。

みんなの回答

  • LHS07
  • ベストアンサー率22% (510/2221)
回答No.5

Visual C++ 6.0 では何も表示されませんが・・・。 sprintfは文字数を返すのでは??? sprintf 関数は、buffer に格納した文字数を返します。この数には終端の NULL 文字は含まれません。 #include<stdio.h> void main(void) { char strA[12] ; double dblA; dblA = 1000; sprintf(strA , "%06.0f", dblA / 100); }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

で, あなたの使っている処理系は?

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

そのものズバリのコードをコピー&ペーストできないのは、 何か理由がありますか?

  • akiyousan
  • ベストアンサー率29% (13/44)
回答No.2

実際に現象が起こっているソースが見たいです^^; >他の行にも同じようなロジックを記述しているのですが・・・ 同じ、ではなく、同じような、というところも気になります。 その差分が問題になっているんではないでしょうか? 同様の箇所全部で意図しない結果になっているわけではない以上、 原因はロジック自体にあるのだと考えたいところですが、 質問内容にあるものだけでは情報不足だと思われます。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

提示されたコードはコンパイルエラーですね。 char strA[12];だと介錯して、 以下のコードを実行しました /* WinXP Sp2 / VC++6.0(インデントは全角空白)*/ #include <stdio.h> int main( int argc, char* argv[] ) {  char strA[12];  double dblA;  dblA = 1000;  sprintf(strA , "%06.0f", dblA / 1000);  printf( "%s\n", strA );  return 0; } 私の環境で実行結果は 000001 Press any key to continue となりました。 実行環境の問題でしょうかね。。。