• 締切済み

C言語のエラーが取れない。

お世話になります。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 やりたい事は、整数表示を小数点第一位までの実数表示にしたいだけです。 変更後のエラー内容は、検索しても明快なページは出てきませんでした。 お手数をお掛け致しますが、 ご教授宜しくお願い致します。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

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

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.3

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

  • TT414
  • ベストアンサー率18% (72/384)
回答No.2

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

回答No.1

コンパイル時、リンカに与えるスイッチで「浮動小数点ライブラリを使用しない」に指定しているので、浮動小数点が使えないバージョンのprintfがリンクされています。 浮動小数点を使いたいなら「浮動小数点ライブラリを使用しない」のスイッチを指定しないでコンパイルする、明示的に「浮動小数点ライブラリを使用する」のスイッチを付けてコンパイルするなど、コンパイルスイッチを明示的に指定しなければいけません。 たぶん、コンパイルオプションに「-f-」が付いている筈なので、それを削り、「-f」を明示的に指定して下さい。 「-f-」を付けてコンパイルすると、浮動小数点が使えないprintf、scanfがリンクされ、実行時に printf : floating point formats not linked (printfの浮動小数点用ライブラリがリンクされていない) Abnormal program termination (プログラムを異常終了する) と言う「実行時エラー」が出ます。

wnsato
質問者

お礼

ご返答有難うございます。 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; } こちらも、皆様ご教授してして頂ければ、有難いです。 宜しくお願い致します。

関連するQ&A