[英]How can I get a const value for the size of a string in 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)
编辑:文本框需要是任意大小,并且在编译时不受 static 常量值的限制,而是动态大小,以便字符串也是如此。
使用本地char
缓冲区来完成您想要的。 没有操作系统调用来分配 memory,您应该知道您希望最大允许输入是什么。
这个 function 并没有真正做任何事情。 获得输入后,您需要将数据复制到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;
}
以上无视。 您应该使用这个 function 签名: https://github.com/ocornut/imgui/blob/01cc6660395032714e7a991eba679a9c69b00stdlib/cpp#L54b0_c5b.m
bool ImGui::InputTextMultiline(const char* label, std::string* str, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.