こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

sprintfの障害

C言語のコーディングの質問です。

以下のロジックを見てください。

=========================================
char [12] strA
double dblA

dblA = 1000

sprintf(strA , "%06.0f", dblA / 1000)
=========================================

上記のロジックを処理すると、結果が必ず
”-00001”となります。
他の行にも同じようなロジックを記述しているのですが
上記の現象があこるロジックの行の時のみ
発生します。

他の処理がメモリを潰しているのかと思い
いろいろ調査してみたのですが、それらしき
異常箇所は見受けれれません。また、コンパイラ
についても異常はありませんでした。

デバック実行で変数「strA」にセットされる
値をみるとaprintfの処理直後に"-00001"が
セットされるのは実証済です。

このような現象が発生することはあるのでしょうか?
原因、対応方法についてご教示お願いいたします。

投稿日時 - 2007-11-08 15:11:17

QNo.3500243

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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);
}

投稿日時 - 2011-10-14 11:40:09

ANo.4

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

投稿日時 - 2007-11-08 20:39:33

ANo.3

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

投稿日時 - 2007-11-08 19:56:38

ANo.2

実際に現象が起こっているソースが見たいです^^;

>他の行にも同じようなロジックを記述しているのですが・・・
同じ、ではなく、同じような、というところも気になります。
その差分が問題になっているんではないでしょうか?

同様の箇所全部で意図しない結果になっているわけではない以上、
原因はロジック自体にあるのだと考えたいところですが、
質問内容にあるものだけでは情報不足だと思われます。

投稿日時 - 2007-11-08 15:43:54

ANo.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
となりました。
実行環境の問題でしょうかね。。。

投稿日時 - 2007-11-08 15:24:40

あなたにオススメの質問