質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

1133閲覧

VS2015においてsprintf 浮動小数点変換できない

yu-ima

総合スコア249

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/09/08 05:33

編集2021/09/08 07:06

VC++6.00で使用していたsprintfをVS2015(Visual Studio 2015)ではコンパイルエラーになるためwsprintに替えたところ実行時正しく変換されません。

(追記)
VC++6.00では、正しく '1.2345'と変換されるのですが、
VS2015では、sprintfは、コンパイルエラー
「error C2440: '関数': 'float' から 'const char *const ' に変換できません。」となり、
wsprintfに変更すると実行時'f'と変換されます。

char buff[256];
float f = 1.2345;
sprintf( buff, "%10.4f", f ); // コンパイルエラー
|
v
wsprintf( buff, "%10.4f", f ); // 実行時正しく変換されない

これは、あるあるなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2021/09/08 05:39

どんなコンパイルエラーが出ましたか? 質問文に追記してください。
yu-ima

2021/09/08 06:32

int32_t様 返信有難うございました。 「error C2440: '関数': 'float' から 'const char *const ' に変換できません。」  です。
int32_t

2021/09/08 07:03 編集

エラーメッセージは質問文に追記してください。 コンパイルしているコードは本当に sprintf() ですか? sprintf_s() とか snprintf() ではなく? 本当に引数は質問文にあるとおりですか?
thkana

2021/09/08 12:23

コンパイルしたソースは本当に sprintf( buff, "%10.4f", f ); となっていますか? sprintf( buff, f, "%10.4f", f ); とかなんとか、第 2バラメータが浮動小数点型の値になっているんじゃないかという疑いが捨てきれないのですが。今一度確認を。
yu-ima

2021/09/08 12:35

有難うございました。 コンソールアプリケーションとして新規に作成して正常に動作しました。 VC++6.00のWindowsアプリケーションプロジェクトを持ってきているためにコンパイルエラーとなっているようです。
guest

回答1

0

再現しません。ちゃんとコンパイル/実行できます。

C

1#include <stdio.h> 2 3int main() { 4 char buff[256]; 5 float f = 1.2345; 6 sprintf( buff, "%10.4f", f ); 7 printf("[%s]\n", buff); 8 return 0; 9}

Plain

1d:\work>cl foo.c 2Microsoft(R) C/C++ Optimizing Compiler Version 19.29.30133 for x64 3Copyright (C) Microsoft Corporation. All rights reserved. 4 5foo.c 6Microsoft (R) Incremental Linker Version 14.29.30133.0 7Copyright (C) Microsoft Corporation. All rights reserved. 8 9/out:foo.exe 10foo.obj 11 12d:\work>foo 13[ 1.2345]

投稿2021/09/08 06:09

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu-ima

2021/09/08 06:27

episteme様 回答ありがとうございました。 説明不足で申し訳ありません。 VC++6.00では正しくコンパイル/実行されるのですが、 VS2015では、sprintfは、コンパイルエラーになり、 wsprintfに変えると、コンパイルはできるのですが、実行時 'f'と変換され、 '1.2345'とは変換されないという意味です。 多分、VS2015自体に問題があるか、制限があるように思うのですが? コンパイル・オプションも無いようでした。
jbpb0

2021/09/08 09:05

質問者さん epistemeさんが回答に書いたコードをVS2015でコンパイル・実行してみましたけど、大丈夫でしたよ rem 32bit用にコンパイル C:\Users\XXX\Downloads>cl foo.c Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x86 Copyright (C) Microsoft Corporation. All rights reserved. foo.c Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. /out:foo.exe foo.obj C:\Users\XXX\Downloads>foo [ 1.2345] rem 64bit用にコンパイル C:\Users\XXX\Downloads>cl foo.c Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. foo.c Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. /out:foo.exe foo.obj C:\Users\XXX\Downloads>foo [ 1.2345]
yu-ima

2021/09/08 10:02

jbpb0様 有難うございました。 Version 12.00.8168(多分VC++6.00)では、正しく実行されましたが、 VS2015(Ver19.00.24215.1)では、コマンド・プロンプト(CL)ではリンクがうまくできずVS2015のGUI(Microsoft Visual studio Community 2015)では、 先のコンパイルエラーとなりました。
jbpb0

2021/09/08 10:24

> VS2015(Ver19.00.24215.1)では、コマンド・プロンプト(CL)ではリンクがうまくできず それは今回のコード限定での話ですか? それとも、Hello World https://www.geekpage.jp/programming/c/helloworld.php とかでもダメなんですか? もし後者なら、VS2015のインストールがうまくいってないのでは?? 普通のコマンドプロンプトではなく、VS2015専用のコマンドプロンプトを使ってますよね? https://cg-lab.mirage-factory.net/wp-content/uploads/sites/7/2019/08/2019-08-20_18h04_51.png
yu-ima

2021/09/08 12:35

有難うございました。 コンソールアプリケーションとして新規に作成して正常に動作しました。 VC++6.00のWindowsアプリケーションプロジェクトを持ってきているためにコンパイルエラーとなっているようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問