为什么string.empty()在字符串包含一个值时评估为true
Why is string.empty() evaluating to true when the string contains a value?
简介
我正在使用MFC制作一个应用程序,该应用程序具有用于对电子表格中数据进行排序的对话框。对话框包含几个控件,包括编辑框。当用户单击确定按钮时,对话框应检索其首选项并关闭。
essue
从对话框获取信息时,包含信息的字符串始终为空注册。我在字符串所在的位置设置了一个断点,并且值似乎可以找到,但是当我调用任何功能以确定字符串的大小时,它显示为0。
代码
std::string min;
std::string max;
MinEdit.GetWindowText(&min[0], 20);
MinVal = atof(min.c_str());
MaxEdit.GetWindowText(&max[0], 20);
MaxVal = atof(max.c_str());
if (min.empty())
{
AfxMessageBox(_T("Please Enter A Minimum Value"));
return;
}
if (max.empty())
{
AfxMessageBox(_T("Please Enter A Maximum Value"));
return;
}
问题
为什么这些字符串总是为空注册?我检查了它们的长度,该长度返回为零,但是当我检查Minval和Maxval时,它们具有输入到编辑框中的值。当这些字符串显示为空时,这些字符串如何能够用一个值初始化其他变量?
这是错误。
std::string min;
MinEdit.GetWindowText(&min[0], 20);
字符串没有长度,您要求GetWindowText写入该缓冲区。那是一个超支,会导致不确定的行为。
而是分配字符串中的一些空间,然后调整大小:
std::string min;
min.resize(20);
min.resize(MinEdit.GetWindowText(&min[0], min.size()));
您不能将std::string
传递给需要字符数组的函数,而无需首先设置缓冲区大小,然后在调用后调整字符串。
min.resize(20);
MinEdit.GetWindowText(&min[0], 20);
min.resize(strlen(&min[0]));
这是您的错误:
MinEdit.GetWindowText(&min[0], 20);
字符串仍然是空的,该语句将其写入随机,未分配的内存。如果您需要从C API写入C std::string
,则首先需要手动调整它:
min.resize(static_cast<size_t>(MinEdit.GetWindowTextLength()));
MinEdit.GetWindowText(&min[0], min.size());
或利用raii成语:
std::string min(MinEdit.GetWindowText(),
static_cast<size_t>(MinEdit.GetWindowTextLength()));
顺便说一句,您确实想将std::wstring
与Windows API(或MFC)一起使用。它映射到整个Windows中使用的本机字符编码。
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- 无论条件是否为true,if总是在c++中执行
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- c++11评估顺序(未定义的行为)
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- Arduino-C++ bool 不会从 false 变为 true
- 如何使用"equal to"以外的评估编写开关语句
- 嵌套 if 中没有返回评估
- 如何使布尔变量仅在设置为 true 时才为真?
- 懒惰的参数评估try_emplace?
- 在实践中,在运行时为零的乘法中是否有任何"lazy"评估
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- C++17:使用 std::optional 来评估枚举是否包含值
- CNTK:->转发或 ->评估某些电脑上的崩溃,而不是其他电脑上的崩溃
- ConstexPR :GCC比Clang更努力地评估ConstexPR
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 尝试创建一个评估字符的bool函数,如果字母数字为字母,则返回true
- `如果constexpr(false)`始终评估为true
- 为什么string.empty()在字符串包含一个值时评估为true
- 当在if语句中时,cin如何评估为true