每当有CString
(标签空间)字符时,我正试图将"\t"
拆分为两个。这是我正在使用的代码:
CString val = data->str;
CString valTok;
CString accTok;
int indx = 0;
valTok = val.Tokenize(_T("\t"), indx);
++indx;
accTok = val.Tokenize(_T("\t"), indx);
它的伟大和全部,但accTok
的第一个角色遗失了。例如,当val = "String1\tString2"
,valTok = "String1"
但accTok ="tring2"
时......怎么样?
修改
所以按照hvd的建议我删除了indx
增量,我有以下代码:
CString val = ((CItemData*)lpDrawItemStruct->itemData)->str; // Was this value causing the problem in the end
CString valTok;
CString accTok;
int indx = 0;
valTok = val.Tokenize(_T("\t"), indx);
accTok = val.Tokenize(_T("\t"), indx); // ASSERT(iStart >= 0) fails
但是现在第一个Tokenize
由于某种原因返回-1
..!有什么想法吗?
解决:
问题在于传递给val
的值:
((CItemData*)lpDrawItemStruct->itemData)->str
有时为NULL
,在某些情况下第二次调用Tokenize
时会导致断言。
答案 0 :(得分:3)
失去++indx
。
来自CStringT::Tokenize的文档:
iStart 的值更新为结束分隔符后面的位置,如果到达字符串末尾,则更新为-1。
第一次调用Tokenize
后,indx
已经指向'\t'
之后,它已经指向“{2}”的“{2}”。通过递增'S'
,它将指向indx
。
以下是t
的简单完整性检查:
Tokenize
你得到不同的结果吗?