【发布时间】:2013-02-19 16:18:58
【问题描述】:
我正在尝试编写一个函数,该函数从列表框中获取数据,检索帐户名称,然后使用 SQL 更改帐户类型。但是,由于某种原因,当列表框项包含“fdsa\t\tdungeon master”但不包含“asdf\t\tuser”时,此代码可以正常工作。在后来的测试中,它以 'auser\t\tuser' 失败。消息框功能表明正在检索正确的数据。这可能是什么原因造成的?
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% 确定字符串中有一个 TAB?
-
是的,提交给listbox的字符串格式为“username + \t\t + accounttype”,listbox正确显示
-
我看不到您将
strBuffer设置为任何内容的任何地方,您可能忘记了一些代码吗? -
没有人会提出使用
std::string::c_str()作为LPARAM~ toLB_GETTEXT` 是一点都不好?如果您没有使用C++11,此时您正在使用未定义的行为。即使使用C++11,也不要这样做这个。