如何在 C++ 中获取字符串大小的 const 值?
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)
编辑:文本框需要是任意大小并且在编译时不受静态 const 值的限制,而是动态大小,这样字符串也是如此。
使用本地 char
缓冲区来完成您想要的。没有 OS 分配内存的调用,您应该知道您希望最大允许输入是什么。
这个函数实际上并没有做任何事情。获得输入后,您需要将数据复制到 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)
我需要能够使用 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)
编辑:文本框需要是任意大小并且在编译时不受静态 const 值的限制,而是动态大小,这样字符串也是如此。
使用本地 char
缓冲区来完成您想要的。没有 OS 分配内存的调用,您应该知道您希望最大允许输入是什么。
这个函数实际上并没有做任何事情。获得输入后,您需要将数据复制到 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)