我无法将cstring转换为int

时间:2012-07-30 19:11:48

标签: c++ http mfc dialog

我想从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,我无法理解它为什么。 请帮帮我。

5 个答案:

答案 0 :(得分:1)

来自TFM(强调我的):

  

每个函数返回通过解释输入产生的int值   字符作为数字。 atoi和_wtoi的返回值为0,如果   输入无法转换为该类型的值。

打印字符串或使用调试器检查它。字符串中可能包含无效(包括不可打印)字符。

答案 1 :(得分:0)

CStringA表示ANSI字符串类型,需要atoi而不是_wtoi

我建议:

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

GetBuffer()并不理想,因为您必须记得以后ReleaseBuffer()

编辑:根据新信息,试试这个:

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

L macro使字符串wchar_t知道。如果L不起作用,请尝试使用_T。然后使用_wtoi_tstoi

答案 2 :(得分:0)

即使你想要做什么也很难说清楚。你知道C ++数组是基于0的,对吧?我问因为这行代码:

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

完全搞砸了。我不明白为什么在尝试索引CStringArray中等于元素数的元素时不会抛出异常。您只能索引到count-1 ==>>在这种情况下是“0”。

你的pvarArguments [0]中会有垃圾 - 我不知道为什么没有抛出异常。

如果你想从变种中获得不同的类型,你可以使用VariantChangeType()而不是弄乱wcstoi或atoi。如果它失败而不是只返回0,它将给出一个错误代码。如果你在CString上使用wcstoi或atoi,那么使用_tstoi()无论你是否定义了UNICODE都是有效的。

答案 3 :(得分: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));

答案 4 :(得分:0)

根据上面的建议,这为我编译:

rs->GetFieldValueString(0).Left(1) == sBoroCode
    && (_ttoi(LPCTSTR(sLowHouseNo)) % 2) == (_ttoi(LPCTSTR(rs->GetFieldValueString(2))) % 2)