我正在尝试从头开始编写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 *的静态向量。
答案 0 :(得分:2)
如何计算const char **中的总字符数
遍历指针数组中的每个字符串。对于每个字符串,计算字符数。将长度加在一起。
请注意,您可能要考虑是否要计算char
对象(即代码单元)的数量,还是要根据字符编码来计算不一定要相同的字符符号的数量。
sizeof(glfwNames)
sizeof
与“元素数量”无关。 glfwNames
是一个指针。 sizeof(glfwNames)
是指针对象的大小。所有特定类型的指针(在特定系统内)始终具有相同的大小,无论它们指向的对象是什么。
如果仅给出指向数组元素的指针而没有其他信息,则无法找出元素的数量。这完全是不可能的,因为指针不包含必要的信息。在不知道何时停止迭代数组的情况下,无法正确进行迭代。
以下是迭代迭代器(指针是数组的迭代器)的范围(在这种情况下,范围是数组)的常见方法:
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()。