목록 상자에서 데이터를 가져와 계정 이름을 검색 한 다음 SQL을 사용하여 계정 유형을 변경하는 함수를 작성하려고합니다. 그러나 어떤 이유로,이 코드는 목록 상자 항목에 'fdsa \ t \ tdungeon master'가 있지만 'asdf \ t \ tuser`가 아니라면 잘 작동합니다. 나중에 테스트 할 때 'auser \ t \ tuser'로 실패했습니다. 메시지 상자 기능은 올바른 데이터가 검색되고 있음을 나타냅니다. 가능한 원인은 무엇일까요?디버그 어설 션이 실패했습니다. 문자열 subscript가 범위를 벗어났습니다.
void ChangeAccountType(HWND hwnd, std::string NewType)
{
using namespace std;
string strQuery;
string strAccountName;
string strBuffer;
int nIndex = SendMessage(GetDlgItem(hwnd, IDC_LIST1), LB_GETCURSEL, 0, 0);
SendMessage(GetDlgItem(hwnd, IDC_LIST1), LB_GETTEXT, (WPARAM)nIndex, (LPARAM)strBuffer.c_str());
MessageBox(hwnd, strBuffer.c_str(), "", NULL);
for(int iii = 0; strBuffer[iii] != '\t'; iii++)
{
strAccountName += strBuffer[iii];
};
strQuery = "UPDATE account SET `account type` = \"" + NewType + "\" WHERE `User Name` = \"" + strAccountName + "\"";
}
오류는 for 루프 내의 어딘가에서 발생합니다. 바로 위에있는 메시지 상자가 완벽하게 작동하기 때문입니다. 모든 조언을 많이 주시면 감사하겠습니다.
나는 100 % 문자열에 탭이 있는지 확인합니다. –
예, 목록 상자에 제출 된 문자열의 형식이 "username + \ t \ t + accounttype"이고 목록 상자에 올바르게 표시됩니다. –
'strBuffer'를 설정 한 곳을 볼 수 없지만 잊어 버렸습니까? 일부 코드? – PlasmaHH