У меня есть следующий код, m_edit - это MFC CEdit (я знаю, что никогда не буду использовать MFC, но проект требует этого)
Это простой цикл, который получает текст из текстового редактора, преобразует его в целое число после получения первой строки, а затем сохраняет его в m_y vector .
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 чисел:
Если вы используете отладчик Visual Studio, вы заметите аномалию!
Вот что это показывает:
- y = 0
- у = 5
- у = 2
- у = 5
- у = 18
- y = 68
Вы это видите? szTemp при вставке в atoi возвращает число 6, но объединяет вторую цифру последнего числа !!! Вот почему я сделал szTemp = "";, но проблема сохраняется. Кроме того, допустим, что последнее число было 17 (а не 18), тогда на этот раз отладчик сказал бы, что у = 67, так что это определенно эта проблема.
Однако в отладчике Visual Studio, когда вы наводите курсор мыши на szTemp во время этой итерации, он говорит «6» <---, а не «68» внутри szTemp. Так что каким-то образом Атои разрушает его. </p>
Предполагаю ли я объединить \ 0 в szTemp перед тем, как поместить его в atoi? Как мне решить это легко?