• 締切済み

C++でsprintfって使用できませんか?

C++でsprintfを使用したところ"定義されていない識別子です" とエラーがでます。 stdio.h/windows.hはインクルードしています。 OSはwin2000です。

みんなの回答

  • kawa100
  • ベストアンサー率83% (5/6)
回答No.4

stdio.hでもwindows.hでもsprintfは定義されていると思います。

全文を見る
すると、全ての回答が全文表示されます。
  • omaru12
  • ベストアンサー率50% (1/2)
回答No.3

sprintfってstringをインクルードしないといけないんじゃないかな?

全文を見る
すると、全ての回答が全文表示されます。
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

sprintfはANSI-C標準関数です。 (C89,C99ともにサポート) エラーが出る状況がわからないと何が起こっているのかわかりません。 エラーの出るソースそのもの(抜粋でかまいません)とコンパイラ名/バージョンを教えてください。

全文を見る
すると、全ての回答が全文表示されます。
noname#3227
noname#3227
回答No.1

素人です Borland C++ 5.5.1 for Win32 では下記のソースがコンパイルと 実行が出来ました、問題ないみたいです。 #include <stdio.h> void main() { char p[100]; sprintf(p,"abcdef\n"); puts(p); } sprintf関数は私の持っているC言語の解説書には実は載っていません。 しかしボーランドのコンパイラのヘルプには解説がありました、sprintf は、たぶん標準関数ではないので処理系によってサポートされることもあ れば、サポートされないこともあると言うことなのでしょう。 C++だからという事ではないと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • sprintf 初歩的な質問

    お世話になっております。 最近独学でC言語の勉強を始めたのですが型の違う値の代入に関して わからないことがあり質問します。 ■やりたいこと■ char型dataの値を2で割った余りを char型ansの[0]から順番に格納してく。 (2の補数を取るためにこのような処理を 考えています(10進を24ビット2進へ変換したい)) ■コード■ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> int main(){ char data[256]="9"; int y; int i; char ans[25]; char* p_ans = ans; y=atoi(data); for(i=0;i<24;i++){ sprintf(ans[i], "%d",y%2); //←エラー y = y/2; } } ■質問■ 上記ソースの中のエラー部分をどのように記述していいのか わかりませんでした。初心者的な発想でポインタを使う方法はと思い sprintf(*(p_ans+i),"%d",y%2); というような記述も試してみましたが駄目でした。 この部分をどのように書いたらいいか詳しい方、教えていただけると 助かります。以上、よろしくお願いします。

  • snprintfが使用できない。

    つい先週ビルドできたプログラムがビルドできなくなりました。 ビルドの状況を見ると、 1>------ すべてのリビルド開始: プロジェクト: disp, 構成: Debug Win32 ------ 1>プロジェクト 'disp'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 1>コンパイルしています... 1>pgm.cpp 1>c:\opencv2.1\include\opencv\cvcompat.h(52) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(55) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(58) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(61) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(64) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(67) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(70) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(73) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(76) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(79) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\documents and settings\st\デスクトップ\cd_r\01capture\01disp\pgm\pgm.cpp(23) : error C2731: 'main' : 関数はオーバーロードできません。 1> c:\documents and settings\st\デスクトップ\cd_r\01capture\01disp\pgm\pgm.cpp(22) : 'main' の宣言を確認してください。 1>ビルドログは "file://c:\***\disp\pgm\Debug\BuildLog.htm" に保存されました。 1>disp - エラー 11、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ========== との出力が・・・・・・ どうすれば、このエラーはなくなるのでしょうか? 環境は Visual C++ 2008 Express Edition Windows Vista Business OEMAct です。

  • error C2065: error C2057: が出てしまいます。

    VC++6.0 ダイアログベースです。 自動で作られたダイアログのヘッダファイルを 自作で作ったクラスのヘッダファイルでインクルードした所 下記のようなエラーが出てしまいました。    error C2065: 'IDD_MY_DIALOG' : 定義されていない識別子です。 error C2057: 定数式が必要です。    まだ自作で作ったクラスはクラスになる前のインクルードのみ書かれた 状態ですが・・・。      //自作する予定のヘッダファイル(まだインクルードのみ) #pragma once #include "DLGTEST.h"//自動で作られたダイアログ //自作のファイル(まだインクルードのみ) #include "stdafx.h" #include "gakusei.h"    自動で作られたファイルをインクルードすることは出来ないのでしょうか? もしインクルードできるならどのようにしたらインクルードできるのでしょうか? オンラインマニュアルで調べたのですが、良くわかりませんでした。 /**オンラインマニュアルより、解決方法**/   stdafx.h からの VC_EXTRALEAN 行を定義する 1 つソリューションが#を削除できます。 これは、通信とレジストリとほかのエリアの MFC によってプロジェクトで直接が使用されない Win32 API を保持します。 含められない代替は、#のセットでの行が「#が VC_EXTRALEAN を定義するのを」置き換えるために、 上記で一覧された行を定義しこと、そしてハードウェアがそれその#が定義する削除によって選択的に登録されこと、です。 たとえば 通信 API が呼び出される場合、#がすべて上記で stdafx.h に「#が NOCOMM を定義すると、」行の以外、 一覧された行を定義するのを持つ可能性があります。

  • winpcapを用いたプログラミング

    visual c++ 2010expressを使ってます。 #include <stdio.h> #include "pcap.h" int main() { return 0; } これをコンパイルすると、 fatal error C1083: include ファイルを開けません。'sys/time.h': No such file or directory とエラーが出ます。 pcap.hの #if defined(WIN32) #include <pcap-stdinc.h> #elif defined(MSDOS) #include <sys/types.h> #include <sys/socket.h> /* u_int, u_char etc. */ #else /* UN*X */ #include <sys/types.h> #include <sys/time.h> #endif /* WIN32/MSDOS/UN*X */ の部分が原因だと思って #define WIN32 を付け加えると、エラーは出ませんでした。しかし、 #define WIN32 #include <stdio.h> #include <Windows.h> #include "pcap.h" int main() { return 0; } これでコンパイルすると下のようにエラーがでます。 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(91): warning C4005: 'AF_IPX' : マクロが再定義されました。 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(460) : 'AF_IPX' の前の定義を確認してください 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(131): warning C4005: 'AF_MAX' : マクロが再定義されました。 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(479) : 'AF_MAX' の前の定義を確認してください 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(168): warning C4005: 'SO_DONTLINGER' : マクロが再定義されました。 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(402) : 'SO_DONTLINGER' の前の定義を確認してください 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(212): error C2011: 'sockaddr' : 'struct' 型の再定義 1> c:\program files\microsoft sdks\windows\v7.0a\include\winsock.h(485) : 'sockaddr' の宣言を確認してください。 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(390): error C2059: 構文エラー : '定数' 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(390): error C3805: '定数': 予期しないトークン。'}' か ',' が必要です。 1>c:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(524): warning C4005: 省略 'pcap_pkthdr::ts' が 未定義の struct 'timeval' で使用しています。 原因は何でしょうか

  • CString: 識別子が見つかりません

    開発環境:Visual c++ 2008 Express Edion OS:Win XP Pro 次のエラーが表示されていて解決できません。 エラー内容は 1>d:\vc_source\dump\dump\Form1.h(448) : error C3861: 'CString': 識別子が見つかりませんでした です。 ちなみにinclude文は以下です。 #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <string> #include <cstring> やりたいことは String型からCString型を経由して、TCHAR型へ変換することです。またはその逆方法の変換です。そのためにCString型は必要になるのですが、そこでコンパイルエラーになっています。 知っているかがおりましたら、教えて下さい。

  • C++でConvertSidToStringSid関数を使うために、sddl.hを使用したい

    お世話になります。 現在C++ 6.0でソフトを作成しています。 その中でConvertSidToStringSid関数を使うために、sddl.hを使用したいのですが、下記のようなエラーが出ます。 -----------インクルード------------------ #include <stdlib.h> #pragma comment(lib,"netapi32.lib") //////////ここで定義しているつもりです。 #define _WIN32_WINNT 0x0500 #include <windows.h> #include <sddl.h> //////////ここで定義しているつもりです。 #include <tchar.h> #include <lmaccess.h> #include <lmapibuf.h> #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ----------デバックエラー J:\Del.cpp(17) : fatal error C1083: インクルード ファイルがオープンできません。'sddl.h': No such file or directory どのようにすればConvertSidToStringSid関数を使うために、sddl.hを使用できますでしょうか? 何卒よろしくお願いします。

  • C言語 暗号化について

    暗号化について勉強しているのですが、奇数文字+1、偶数文字-1にするときは、#include <stdio.h> #include <stdlib.h> #include <ctype.h> char myislower(char c) { if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){ if(c % 2 == 1){ c = c+1; }else{ c = c-1; } } return c; } このプログラムでやりたいのですが、エントリーポイントを定義しなければなりません、とエラーがででしまいます。どうしたらいいでしょうか?

  • 別環境に移植するとヘッダファイル内でエラーが出ます

    ある開発環境ではコンパイルできたソースコードを、別の環境に移したところ、コンパイルができなくなってしまいました。 以前の環境の詳細が分からないので困っています。 以下、現在の環境とエラーについて記述します。 現在の開発環境:VC++ 6.0 OS:WindowsXP Professional DirectX9 SDK、PlatForm SDK をインストール済 (先程インストールしました) コンパイルを行ったところ、'DWORD_PTR'に関するエラーが大量に出ました。 エラーメッセージの一例: C:\DXSDK\INCLUDE\dxtrans.h(2580) : error C2061: 構文エラー : 識別子 'DWORD_PTR' がシンタックスエラーを起こしました。 C:\DXSDK\INCLUDE\mmstream.h(99) : error C2065: 'DWORD_PTR' : 定義されていない識別子です。 コードの冒頭では以下の順でヘッダファイルをインクルードしています。 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <dshow.h> #include <qedit.h> #include <math.h> #include <time.h> #include <winsock2.h> #include <stdarg.h> インクルードの優先順位の問題かと考えましたが、以前の環境ではこのコードのままで動いていたので、頭をひねっています。 どなたか、知恵を貸していただけませんか? よろしくお願いします。

  • \0 sprintf( ) strcat( )

    #include <iostream.h> main(){ char color_r[12], color_g[3], color_b[3]; sprintf(color_b, "%d", 123); sprintf(color_g, "%d", 456); sprintf(color_r, "%d", 789); strcat(color_r,","); strcat(color_r,color_g); strcat(color_r,","); strcat(color_r,color_b); cout << color_r; printf("\n%s",color_r[11]); } 結果は 789,456,123 (null) 問題ない。 でも、Winプログラムだと問題がある。 #include <windows.h> #include <iostream.h> 。。。  case WM_PAINT:   hdc = BeginPaint(hWnd, &ps);   char color_r[12], color_g[3], color_b[3];   sprintf(color_b, "%d", 123);   sprintf(color_g, "%d", 456);   sprintf(color_r, "%d", 789);   strcat(color_r,",");   strcat(color_r,color_g);   strcat(color_r,",");   strcat(color_r,color_b);   TextOut(hdc,10,10,color_r,strlen(color_r));   EndPaint(hWnd, &ps);  break; 結果は、実行時エラーです。 えらーだけど、TextOut( ) での表示が 789,456,123456 となっているのは見れる。 456 というのがくっく。 これが問題。 char color_r[12], color_g[4], color_b[4]; として \0 の領域を用意してやれば問題は起こらないけど、 [4] にしたとして、\0 がどのように作用しているのかが 分かりません。 [3] のエラーは  strcat(color_r,color_b); の次に  strcat(color_r,"\0"); を書けばいいような気がしてやってみたけど、 結果は変わらず、実行時エラー。 やっていることは GetPixel( ) の3色分離だけど、 配列の \0 をケチって宣言すると、 R,G,B が、R,G,BG となってしまうことが分かったけど どうして R,G,BG になるのかを知りたいです。

  • C++でismbblead()が使えない。

    http://www.orchid.co.jp/computer/cschool/kanji1.html 上記のサイトを参考にVS2013で以下のようなソースを書きました。 #include "stdafx.h" #include "stdio.h" int _tmain(int argc, _TCHAR* argv[]) { char *str = "123498765abcd漢字0000"; int i1; for (i1 = 0;;){ if (str[i1] == '\0')break; if (_ismbblead(str[i1])){ if (str[i1 + 1] == '\0'){ break; } putchar('['); putchar(str[i1++]); putchar(str[i1++]); putchar(']'); continue; } putchar(str[i1++]); } return 0; } 残念なことにコンパイルはとうらず、ismbbleadの部分が引っ掛かっているようでした。 C++だと使えないCのメソッドもあるのでしょうか? そういうわけでないのであればなぜ、コンパイルは通らないのでしょうか?C言語のコンパイラでは問題なく参考サイトのソースはコンパイルできました。 出ているエラーは IntelliSense: 識別子 "_ismbblead" が定義されていません error C3861: '_ismbblead': 識別子が見つかりませんでした というものでした。よろしくお願いします。

専門家に質問してみよう