CString
を に変換したいchar[]
。誰かがこれを行う方法を教えてくれますか?
私のコードは次のようなものです:
CString strCamIP1 = _T("");
char g_acCameraip[16][17];
strCamIP1 = theApp.GetProfileString(strSection, _T("IP1"), NULL);
g_acCameraip[0] = strCamIP1;
CString
を に変換したいchar[]
。誰かがこれを行う方法を教えてくれますか?
私のコードは次のようなものです:
CString strCamIP1 = _T("");
char g_acCameraip[16][17];
strCamIP1 = theApp.GetProfileString(strSection, _T("IP1"), NULL);
g_acCameraip[0] = strCamIP1;
これは正しい線に沿っているようです。http://msdn.microsoft.com/en-us/library/awkwbzyc.aspx
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aString);
あなたの場合、これは次のようになります
strcpy(g_acCameraip[0], (LPCTSTR)strCamIP1);
MSDNサイトから:
// Convert to a char* string from CStringA string
// and display the result.
CStringA origa("Hello, World!");
const size_t newsizea = (origa.GetLength() + 1);
char *nstringa = new char[newsizea];
strcpy_s(nstringa, newsizea, origa);
cout << nstringa << " (char *)" << endl;
CString はに基づいてTCHAR
いるため、コンパイルしない_UNICODE
場合CStringA
、またはコンパイルする場合_UNICODE
はCStringW
.
変換の場合はCStringW
少し異なります (例もMSDNから):
// Convert to a char* string from a wide character
// CStringW string. To be safe, we allocate two bytes for each
// character in the original string, including the terminating
// null.
const size_t newsizew = (origw.GetLength() + 1)*2;
char *nstringw = new char[newsizew];
size_t convertedCharsw = 0;
wcstombs_s(&convertedCharsw, nstringw, newsizew, origw, _TRUNCATE );
cout << nstringw << " (char *)" << endl;
wcstombs_sを使用できます:
// Convert CString to Char By Quintin Immelman.
//
CString DummyString;
// Size Can be anything, just adjust the 100 to suit.
const size_t StringSize = 100;
// The number of characters in the string can be
// less than String Size. Null terminating character added at end.
size_t CharactersConverted = 0;
char DummyToChar[StringSize];
wcstombs_s(&CharactersConverted, DummyToChar,
DummyString.GetLength()+1, DummyString,
_TRUNCATE);
//Always Enter the length as 1 greater else
//the last character is Truncated
ATL を使用している場合は、変換マクロの 1 つを使用できます。CString はデータを tchar として格納するため、CT2A() を使用します (マクロ名の C は const を表します)。
CString from("text");
char* pStr = CT2A((LPCTSTR)from);
これらのマクロはスマートです。tchar が ascii (_UNICODE が定義されていない) を表す場合、ポインタを渡すだけで何もしません。
以下の詳細情報、ATL 文字列変換クラスセクション: http://www.369o.com/data/books/atl/index.html?page=0321159624%2Fch05.html
CString str;
//Do something
char* pGTA = (LPTSTR)(LPCTSTR)str;//Now the cast
ちょうど (LPTSTR)(LPCTSTR)。これがあなたが必要とするものであることを願っています:)
char strPass[256];
strcpy_s( strPass, CStringA(strCommand).GetString() );
fopen は char* パラメータを必要とする関数です。したがって、使用可能な文字列として CString がある場合は、次のコードを使用できます。幸せになってください:)ここでは、cFDlg.GetPathName().GetString();
基本的に私のコードで CString を返します。
char*pp = (char*)cFDlg.GetPathName().GetString();
FILE *fp = ::fopen(pp,"w");
memcpy を使用します。
char c [25];
Cstring cstr = "123";
memcpy(c,cstr,cstr.GetLength());
オブジェクトを固定配列にコピーする必要は本当にありますか?CString
char
enum { COUNT=16 };
CString Cameraip[COUNT];
Cameraip[0] = theApp.GetProfileString(strSection, _T("IP1"), NULL);
// add more entries...
...そして-後で-エントリにアクセスするとき、たとえば次のように
for (int i=0; i<COUNT; ++i) {
someOp(Cameraip[i]); // the someOp function takes const CString&
}
...必要に応じて変換できます。
CStringA/W
は安価に暗黙のうちに に変換可能const char/wchar_t *
です。C スタイルの文字列が必要な場合はいつでも、CString
オブジェクト自体 (またはその結果が.GetString()
同じ) を渡すだけです。文字列オブジェクトが生きていて変更されていない限り、ポインターは有効なままです。
strcpy(g_acCameraip[0], strCamIP1);
// OR
strcpy(g_acCameraip[0], strCamIP1.GetString());
書き込み可能な (非定数) バッファーが必要な場合は.GetBuffer()
、オプションの最大長引数と共に使用します。
持っているCStringW
が必要な場合const char*
、またはその逆の場合は、一時CStringA
オブジェクトを使用できます。
strcpy(g_acCameraip[0], CStringA(strCamIP1).GetString());
しかし、はるかに良い方法は、配列を持つことCString
です。null で終わる文字列が必要な場所ならどこでも使用できますが、文字列のメモリも管理します。
std::vector<CString> g_acCameraip(16);
g_acCameraip[0] = theApp.GetProfileString(strSection, _T("IP1"), NULL);