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