我有一个名为const char**
的{{1}},其中包含所需GLFW库扩展的字符串数组的C版本。
glfwNames
分隔的字符串的各个字符?
'\0'
这是我从一个答案中尝试的结果,返回值是
const char** glfwNames = glfwGetRequiredInstanceExtensions(&glfwCount)
for (const char** name = glfwNames; *name; ++name)
{
slog("GLFW Extensions to use: %s", *name);
}
是GLFW http://www.glfw.org/docs/latest/group__vulkan.html#ga1abcbe61033958f22f63ef82008874b1
所需的扩展名数组答案 0 :(得分:3)
如果glfwNames
以nullptr
结尾:
#include <cstdio>
int main()
{
char const *glfwNames[] = { "foo", "bar", "baz", nullptr };
for (char const **p = glfwNames; *p; ++p)
std::puts(*p);
}
如果*知道*字符串数:
std::uint32_t glfwCount;
const char** glfwNames = glfwGetRequiredInstanceExtensions(&glfwCount)
for (std::uint32_t i{}; i < glfwCount; ++i)
{
slog("GLFW Extensions to use: %s", glfwNames[i]);
}
也要遍历各个char
:
for (std::uint32_t i{}; i < glfwCount; ++i)
{
for(char const *p{ glfwNames[i] }; *p; ++p)
std::putchar(*p);
}
答案 1 :(得分:0)
我用来遍历main
的参数的一种常见模式是通过std::for_each
:
#include <algorithm>
int main(int argc, char* argv[]) {
std::for_each( argv + 1, argv + argc, handler );
}
其中handler
是采用const char*
,const std::string&
或std::string_view
(我在后面使用)的任何函数。
类似的方法是否可以解决您的问题?请注意,这种方法要求您知道字符串数组的长度。
请注意,重要的是要知道std::for_each
的返回参数是所提供的函数(在这种情况下为handler
)。这样一来,一旦已知输入已用尽,建议的模式就可以进行最后一次调用:
#include <algorithm>
int main(int argc, char* argv[]) {
std::for_each( argv + 1, argv + argc, handler )("Argument To Last Call");
}
这可以用来实现状态机,该状态机最后接收终止触发。