【发布时间】:2024-01-16 22:34:01
【问题描述】:
我需要能够使用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 值的限制,而是动态大小,以便字符串也是如此。
【问题讨论】:
-
您能否将文档链接到
ImGui,以便我们了解它的局限性?同时显示代码,表明你想如何使用这个函数。 -
如果你绝对需要一个动态大小的
char *,我会制作一个适当大小的std::vector<char>并使用std::vector::data来获得char *。如果你在一个小函数中并且小心,你甚至可以使用new和delete。 -
如果您的编译器支持 C++17 并且您的组织允许,
std::string::data也可能很有用。 -
c++20 具有 constexpr 字符串,因此您可以使用
.data()获取运行时 const char* 的指针。它们也以额外的 0 结尾,因此与 c char 字符串兼容。 -
说实话,在这种情况下几乎没有意义。您创建一个字符串,将字符串大小调整为适当的长度,然后将指针从
data和长度传递到InputTextMultiline。完成后,您会找到 null 的位置并将字符串的大小调整回字符串使用的长度。我误解了在这种情况下文本框是什么。它是一个输入小部件,而不是一个输出小部件。
标签: c++ arrays string char constants