如何遍历一个const char **?

时间:2018-10-24 18:29:36

标签: c++ pointers glfw

我有一个名为const char**的{​​{1}},其中包含所需GLFW库扩展的字符串数组的C版本。

是否可以遍历const char *(字符串)或由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

所需的扩展名数组

2 个答案:

答案 0 :(得分:3)

如果glfwNamesnullptr结尾:

#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");
}

这可以用来实现状态机,该状态机最后接收终止触发。