如何解决如何在 C++ 中获取字符串大小的常量值?
我需要能够使用 ImGui
文本框,但是它们不接受 const char*
或 std::string
,因此我需要将字符串转换为 char
数组。然而,问题在于我需要我的 char
数组与字符串 (+1) 的大小相同。我收到一个错误,说它需要在声明中是常量值,但我需要能够访问字符串的大小并创建一个将该值保持为常量的变量。这可能吗?代码如下:
static std::string text = "";
static bool read_only = false;
char txt[text.size() + 1] = text;
ImGui::Begin("Window");
ImGui::InputTextMultiline("Textbox",txt,IM_ARRAYSIZE(txt),ImVec2(-1.0f,ImGui::GetTextLineHeight() * 16),ImGuiInputTextFlags_AllowTabInput | (read_only ? ImGuiInputTextFlags_ReadOnly : 0));
ImGui::End();
ImGui::InputTextMultiline 的格式是这样的:
bool InputTextMultiline(const char* label,char* buf,size_t buf_size,const ImVec2& size = ImVec2(0,0),ImGuiInputTextFlags flags = 0,ImGuiTextEditCallback callback = NULL,void* user_data = NULL)
编辑:文本框需要是任意大小,并且在编译时不受静态常量值的限制,而是动态大小,以便字符串也是如此。
解决方法
使用本地 char
缓冲区来完成您想要的。没有操作系统调用来分配内存,您应该知道您希望允许的最大输入是什么。
这个函数实际上并没有做任何事情。获得输入后,您需要将数据复制到 std::string
或其他东西中以对其进行处理。
std::string get_text_input(std::size_t arbitrary_size) {
char* buf = new char[arbitrary_size];
ImGui::Begin("Window");
ImGui::InputTextMultiline("Textbox",buf,arbitrary_size,ImVec2(-1.0f,ImGui::GetTextLineHeight() * 16),ImGuiInputTextFlags_AllowTabInput | (read_only ? ImGuiInputTextFlags_ReadOnly : 0));
ImGui::End();
std::string ret(buf);
delete[] buf;
return ret;
}
无视以上内容。您应该使用此函数签名: https://github.com/ocornut/imgui/blob/01cc6660395032714e7a991eba679a9c69b00c5b/misc/cpp/imgui_stdlib.cpp#L54
bool ImGui::InputTextMultiline(const char* label,std::string* str,const ImVec2& size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。