error C2664:char *strcpy(char *,const char *)& Unable to convert argument 2 from CString" to const char *.引数2をCString"に変換できない。
2022-02-28 13:20:08
<テーブル
_tcscpy
関数です。
文字列をコピーします。この関数にはいくつかのバージョンがある。
関数のプロトタイプです。
char *strcpy( char *strDestination, const char *strSource );
wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );
unsigned char *_mbscpy( unsigned char *strDestination, const unsigned char *strSource );
コモンネーム リクエストヘッダ 互換性スキーム
strcpy <string.h> ANSI, Win 95, Win NT
wcscpy <string.h> または <wchar.h> ANSI、Win 95、Win NT
_mbscpy <mbstring.h> Win 95, Win NT
パラメータの説明です。
strDestination 対象文字列へのポインタ
strSource ソース文字列ポインタ
戻り値
3つの形式とも、対象の文字列を返します。値が返されない場合、それは予約されたケースで
エラーメッセージ
.
説明文:
strcpy関数は、strSourceを端末のNULL文字も含めてコピーします。
wcscpy と _mbscpy は幅が広い
バイト
とマルチバイト版の strcpy がある。引数や戻り値もワイドバイトやマルチバイトである。
-----------------
VS2005でstrcpy関数を使用したところ、コンパイルが通らない。Webで検索したところ、他の方の回答から転載した以下の理由で、代わりにマクロ_tcscpyでコンパイルされるようです。
I. VS2005 で Unicode または ASCII 文字セットを設定する際の問題点
VS2005でプログラムを開発する場合、デフォルトの文字コードはUnicodeですので、プログラム内で文字列定数を使用する場合は、Unicodeへの変換を表示しないとコンパイル時にエラーとなります。例えば
HDC hScrDC = CreateDC(TEXT("DISPLAY")), NULL, NULL, NULL); //画面用デバイス記述テーブルを作成する。
この文章は、次のように書くと:
HDC hScrDC = CreateDC("DISPLAY"),NULL,NULL,NULL);
以下のエラーでコンパイルします。
error C2664: 'CreateDCW' : cannot convert parameter 1 from 'const char [8]' to 'LPCWSTR'.
このエラーメッセージに基づいて、この文章を次のように変更することができます。
HDC hScrDC = CreateDC((LPCWSTR)"DISPLAY",NULL,NULL,NULL).HDC hScrDC = CreateDC((LPCWSTR)"DISPLAY",NULL,NULL);
これはコンパイルに合格しますが、最終結果は正しくありません(hScrDCの値は0です)!
正しいやり方は2つあります。
1つは、もしプログラムがUnicode文字セットをサポートするようにしたい場合、プログラムを:
HDC hScrDC = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL).HDC hScrDC = CreateDC(TEXT("DISPLAY"),NULL,NULL);
次に、もしプログラムがユニコード文字セットをサポートしたくない場合、プログラムを変更する必要はありません。プロジェクトの設定を変更するだけです。
プロジェクトメニュー-プロジェクトのプロパティ(最後の一つ)-設定プロパティ-一般-プロジェクトのデフォルト-文字セット、(プロジェクト-> プロパティ-> 設定プロパティ-> 一般-> プロジェクトのデフォルト-> 文字セット)を「ユニコード文字セットを使う」を「設定しない」に変更するだけです。
II. vs2005 ユニコード問題の解決法
今日、私はこの問題について考えてきた、つまり、Microsoftの有名なvstudioの下位互換性を維持する方法、簡単に言えば、直接vc6のプロジェクトを対2005に変換する方法、およびその後、プロジェクトの構成に限りデフォルトmfcプロジェクトのプロパティは、あなたができるマルチバイト文字セットを使用するので、vc6のようにすることができます発見 もちろんユニコード文字エンコーディングにはメリットがありますが、毎回、あなたは文字やインターフェースで表示したい、あなたがしなければならないことです
TCHAR wStr[255] = {0};
MultiByteToWideChar(CP_ACP,MB_COMPOSITE,data.payload,256,wStr,254) の変換は非常に面倒でシステムリソースを浪費するので、次回からいくつかの関連プログラムを使用する際にプロジェクトの設定を変更することにしました。開発効率を上げることができる。
(上記はhttp://hi.baidu.com/ncudlz/blog/item/bcf4414ca3e26afcd62afc64.html より取得)
strcpy関数をwcscpyに変更しても、コンパイルして合格します。
間違ったコードをコンパイルする。
void playwav(TCHAR * パス)
{
TCHAR szPath[100];
memset(szPath, 0, sizeof(szPath))を使用します。
strcpy(szPath, path);
}
エラー時のプロンプトを表示します。
error C2664: "strcpy": 引数 1 を "TCHAR [100]" から "char *" に変換できませんでした。
解決策
1. デフォルトのUnicode文字セット: strcpy関数の代わりにwcscppy関数を使用するか、_tcscpyマクロを使用します。tcscpy はヘッダーファイル tchar.h で定義されています。もし、コンパイラが定義されていないというエラーを報告したら、ヘッダーファイルを参照する必要があります。_tcscpyは、プログラムによって設定された文字セットに従って対応する関数を選択します。もし、Unicode文字セットをサポートしていれば、_tcscpyマクロはwcscppyを使い、もし、ASCIIをサポートしていればstrcpyを使ってください。
2. 上記2の方法に従って設定し、やはりstrcpy関数を使用する。
関連
-
PHP connect to Mysql error フェイタルエラーです。Uncaught Error: アプリケーションの未定義関数mysql_connect()への呼び出し
-
[問題ログ】コンパイル時にイニシャライザーの要素が定数でないエラーが発生する
-
configparserモジュールがインポートできない、import configparserエラー解決法
-
Pythonです。TypeError: 'dict' オブジェクトは呼び出し可能ではありません。
-
Pythonでの強制変換('str'と'int'のインスタンス間でサポートされていないエラーが発生した場合)。
-
ValueErrorの解決策です。閉じたファイルへの I/O 操作
-
GPS
-
アンドロイド エントリーの利用
-
ADODBのExecuteメソッドです。
-
Could not find method android() for arguments問題を解決する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
cenos upgrade g++ gcc(cc1plus: error: unrecognized command line option "-std=c++11")
-
Java配列のout of boundsエラーです。スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 15
-
不完全な型へのエラーメンバーアクセス
-
id 'com.android.library' を持つプラグインが見つかりません。
-
ValueErrorを解決する: xとyは同じ1次元でなければならない。
-
Webサイトが表示される おかしなことになったようだ
-
Scrapy エラー : exceptions.AttributeError: 'HtmlResponse' オブジェクトには 'urljoin' という属性がありません。
-
matlabでよく使われる論理演算
-
ビット演算が表示される 【警告】多文字文字定数
-
recordMP3 は、Web 録音、アップロード、再生機能を実装しています。