プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。capeofdragonと申します。

現在、windows 7でWindows98をエミュレータで起動し、
Boland(R) Turbo C/C++ Version 4.0Jで、
プログラムを改編し、コンパイルしているのですが、
以下のエラーが出て悩んでいます。

元々のソース:sprintf(pWk,"%3d",stChnl[pCnt].mMesCurrent);

変更後: sprintf(pWk,"%.1f",(double)((double)stChnl[pCnt].mMesCurrent/10.0F));

変更後のエラー内容:printf : floating point formats not linked
Abnormal program termination
やりたい事は、整数表示を小数点第一位までの実数表示にしたいだけです。
変更後のエラー内容は、検索しても明快なページは出てきませんでした。

お手数をお掛け致しますが、
ご教授宜しくお願い致します。

A 回答 (4件)

pWkの指す領域はサイズ足りてますか?



あと#1のお礼を見て思ったのですが
勉強し直された方がよいかと思います。
sprintfの第1引数の領域サイズは足りてませんし、
自動変数の配列のアドレスを戻り値にしてますし。
    • good
    • 0

http://c-faq.com/fp/fpnotlinked.html
ここにはダミーとして実数型ライブラリ関数を呼べと書いてある。そうしないと非実数型のprintfをリンクするそうだ。
    • good
    • 0

回答ではありません。


>sprintf(pWk,"%.1f",(double)((double)stChnl[pCnt].mMesCurrent/10.0F));
無駄キャスト、定数の型指定間違いのオンパレードです、何を考えて変更したのでしょう。
sprintf(pWk,"%.1f",stChnl[pCnt].mMesCurrent/10.0);
で大丈夫です。
    • good
    • 0

コンパイル時、リンカに与えるスイッチで「浮動小数点ライブラリを使用しない」に指定しているので、浮動小数点が使えないバージョンのprintfがリンクされています。



浮動小数点を使いたいなら「浮動小数点ライブラリを使用しない」のスイッチを指定しないでコンパイルする、明示的に「浮動小数点ライブラリを使用する」のスイッチを付けてコンパイルするなど、コンパイルスイッチを明示的に指定しなければいけません。

たぶん、コンパイルオプションに「-f-」が付いている筈なので、それを削り、「-f」を明示的に指定して下さい。

「-f-」を付けてコンパイルすると、浮動小数点が使えないprintf、scanfがリンクされ、実行時に

printf : floating point formats not linked
(printfの浮動小数点用ライブラリがリンクされていない)
Abnormal program termination
(プログラムを異常終了する)

と言う「実行時エラー」が出ます。
    • good
    • 0
この回答へのお礼

ご返答有難うございます。
makefile内のオプションに
「-f」
がありましたが、
「-f-」
はありませんでした。
試しに、「-f」を消去しましたが、エラーは取れませんでした。

よって、整数を十分の一倍させて、小数点第一位までを表示させる
プログラムを作ろうと考え、以下の簡単なテストをしてみましたが、
上手くいきません。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *ftoa(int num)
{
char Num[5];
char decimal1[1];
char integer[2];
sprintf_s(decimal1,"%d",(num % 10));
sprintf_s(integer,"%d",(num / 10));
if(integer[0] == '0')
{
sprintf_s(Num,"%d.%d",integer[1],decimal1[0]);
return (Num);
}
else
{
sprintf_s(Num,"%d%d.%d",integer[0],integer[1],decimal1[0]);
return (Num);
}
}
int _tmain(int argc, _TCHAR* argv[])
{

char *pWk;
int a = 252;
pWk = ftoa(a);
printf("pWk = %s\n",pWk);
return 0;
}

こちらも、皆様ご教授してして頂ければ、有難いです。
宜しくお願い致します。

お礼日時:2012/04/12 17:33

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