【发布时间】:2010-05-02 02:56:36
【问题描述】:
我有以下代码,m_edit 是一个 MFC CEdit(我知道我永远不会使用 MFC,但项目需要它)。
这是一个简单的循环,从文本编辑中获取文本,在获取第一行后将其转换为整数,然后将其存储在 m_y 向量中。
LPTSTR szTemp;
vector<int> m_y;
for(int i = 0; i < m_edit->GetLineCount(); i++){
szTemp = s_y.GetBuffer(0);
m_edit->GetLine(i, szTemp); // get line text store in szTemp
y = atoi(szTemp);
m_y.push_back(y);
szTemp = "";
y = 0;
}
重要示例:假设 CEdit 有 6 个数字:
- 0
- 5
- 2
- 5
- 18
- 6
如果您使用 Visual Studio 的调试器,您会发现异常! 这是它显示的内容:
- y = 0
- y = 5
- y = 2
- y = 5
- y = 18
- y = 68
你看到了吗? szTemp 插入 atoi 时,返回数字 6,但连接最后一个数字的第 2 位!!!这就是我执行 szTemp = ""; 的原因,但问题仍然存在。另外,假设最后一个数字是 17(不是 18),那么这次调试器会说 y = 67,所以肯定是这个问题。
但是,Visual Studio 调试器,当您在此迭代期间将鼠标悬停在 szTemp 上时,它会在 szTemp 中显示“6”
我想在将它放入 atoi 之前将一个 \0 连接到 szTemp 中吗?如何轻松解决?
【问题讨论】: