如何计算const char **中的总字符数?

时间:2018-10-20 23:40:02

标签: c++ pointers char const

我正在尝试从头开始编写Vulkan应用程序,但是在尝试计算a中的字符总数时遇到了问题

const char**

我想知道如何遍历每个“ c字符串”的每个字符。 这是为了比较现有实例扩展以创建Vulkan实例。

这是我遇到的功能,每个问题似乎都局限于以下事实:sizeof返回字节的大小,而不是元素的数量。

void Extensions_Manager::GetInstanceExtensionNames(const char** extNames, const char** glfwNames, bool validation)
{
std::string extension = "";

if (validation)
    instanceExtensionNames.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);


for (int i = 0; i < sizeof(glfwNames); ++i)
{
    if (glfwNames[i] == '\0')
    {
        instanceExtensionNames.push_back(extension.c_str());

        slog("Instance extension to use %s", extension.c_str());

        extension = "";
    }
    else
    {
        extension += glfwNames[i];
    }
}

for (const char* ext : instanceExtensionNames)
{
    slog("Available Extension: %s", ext);
}

extNames = instanceExtensionNames.data();
}


instanceExtensionNames

是const char *的静态向量。

2 个答案:

答案 0 :(得分:2)

  

如何计算const char **中的总字符数

遍历指针数组中的每个字符串。对于每个字符串,计算字符数。将长度加在一起。

请注意,您可能要考虑是否要计算char对象(即代码单元)的数量,还是要根据字符编码来计算不一定要相同的字符符号的数量。

sizeof(glfwNames)

sizeof与“元素数量”无关。 glfwNames是一个指针。 sizeof(glfwNames)是指针对象的大小。所有特定类型的指针(在特定系统内)始终具有相同的大小,无论它们指向的对象是什么。

如果仅给出指向数组元素的指针而没有其他信息,则无法找出元素的数量。这完全是不可能的,因为指针不包含必要的信息。在不知道何时停止迭代数组的情况下,无法正确进行迭代。

以下是迭代迭代器(指针是数组的迭代器)的范围(在这种情况下,范围是数组)的常见方法:

  • 将范围的长度作为参数传递,并使用索引循环。这适用于可随机访问的迭代器,例如指针。
  • 将迭代器(在这种情况下为指针)传递到范围的末尾(最后一个元素之后)。这种方法更为通用,因为它也可以与非随机访问迭代器一起使用。在循环中增加迭代器,一旦迭代器等于结束,就知道您已经达到了什么。
  • 将某些值指定为前哨元素(也称为终止符)。遇到前哨值时,您知道迭代已到达范围的末尾。此方法用于以null终止的字符串。
  • 附注:有趣的是,命令行参数(argc + argv提供两种方式:argc是长度,而char** argv是长度也由空指针终止。

如果从库中收到glfwNames,请查阅库的文档以获取长度信息。如果您同时控制着调用和定义函数,请确保将足够的信息传递给函数。

答案 1 :(得分:-2)

字符串以'\ 0'结尾。

假设您有* ptr =“ string”;

您在这里可以做的是:

int i = 0;
while(ptr[i] != '\0')
    i++;
cout << ptr[0];
    return 0;

这将为您提供带有'\ 0'的字符串的全部字符,否则您可以使用string.h lib中的strlen()。