1

cstringからintを取得したい。これがコードです。


CStringArray paramArray;
paramArray.Add((LPCSTR)"5");
paramArray.Add((LPCTSTR)"151");

pvarArguments = new CComVariant[2];
pvarArguments[0] = (LPCTSTR)paramArray[1];

CString str;
str = (CStringA)pvarArguments[0];
int nlen = _wtoi(str.GetBuffer());

プログラムを実行すると、常に値が 0 になり、その理由がわかりません。私を助けてください。

4

5 に答える 5

1

TFMから(強調鉱山):

各関数は、入力文字を数値として解釈して生成された int 値を返します。入力をその型の値に変換できない場合、atoi および _wtoi の戻り値は 0 です。

文字列を出力するか、デバッガを使用して調べます。文字列に無効な (印刷できない文字を含む) 文字が含まれている可能性があります。

于 2012-07-30T19:14:19.440 に答える
0
CStringArray paramArray;
paramArray.Add(_T("5"));
paramArray.Add(_T("151"));

CComVariant *pvarArguments = new CComVariant[2];
pvarArguments[0] = (LPCTSTR)paramArray[1];

CString str;
str = pvarArguments[0].bstrVal;
int nlen = _ttoi(LPCTSTR(str));
于 2012-08-01T04:23:37.480 に答える
0

何をしようとしているのかさえわかりにくい。C++ の配列が 0 から始まることはご存知ですよね? このコード行は次のとおりです。

pvarArguments[0] = (LPCTSTR)paramArray[1];

完全にめちゃくちゃです。要素の数と等しい CStringArray 内の要素にインデックスを付けようとすると、例外がスローされない理由がわかりません。この場合は「0」であるcount-1 ==>>にのみインデックスを付けることができます。

あなたの pvarArguments[0] にはがらくたが含まれています-例外がスローされなかった理由がわかりません。

バリアントから別の型を取得したい場合は、VariantChangeType() を使用でき、wcstoi や atoi をいじることはありません。失敗した場合は、0 を返すだけでなく、エラー コードが返されます。CString で wcstoi または atoi を使用することに夢中になっている場合は、UNICODE が定義されているかどうかに関係なく機能する _tstoi() を使用してください。

于 2012-07-30T22:22:28.773 に答える
0

CStringAatoiは、 notを必要とする ANSI 文字列型を意味します_wtoi

私は提案します:

CString str(pvarArguments[0]);
int nlen = atoi(str.GetString());

GetBuffer()後で覚えておく必要があるため、理想的ではありませんReleaseBuffer()

編集:新しい情報に照らして、これを試してください:

paramArray.Add(L"5");
paramArray.Add(L"151");

L マクロは、文字列 wchar_t を認識させます。L が機能しない場合は、_T代わりに試してください。そして、_wtoiまたはを使用します_tstoi

于 2012-07-30T19:46:17.683 に答える