如何计算常量字符**中的总字符数?



我正在尝试从头开始编写 Vulkan 应用程序,并且在尝试计算

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] == '')
{
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

是常量字符* 的静态向量

如何计算常量字符中的总字符数**

遍历指向数组中的每个字符串。对于每个字符串,计算字符数。将长度相加。

请注意,您可能需要考虑是要计算char对象的数量(即代码单元(,还是字符符号的数量,这些字符符号的数量不一定是相同的数字,具体取决于字符编码。

sizeof(glfwNames)

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

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

以下是迭代迭代器的范围(在本例中范围是数组(的常用方法(指针是数组的迭代器(:

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

如果您从库中收到glfwNames,请查阅库的文档以了解如何找出长度。如果您控制调用和定义函数,请确保将足够的信息传递到函数中。

最新更新