アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

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

dblA = 1000

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

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

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

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

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

A 回答 (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);
}
    • good
    • 0

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

    • good
    • 0

そのものズバリのコードをコピー&ペーストできないのは、


何か理由がありますか?
    • good
    • 0

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



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

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

提示されたコードはコンパイルエラーですね。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!