const static char *g_szTestDataFiles[] = {
".\\TestData\\file1.txt",
".\\TestData\\file2.txt",
".\\TestData\\file3.txt",
".\\TestData\\file4.txt",
".\\TestData\\file5.txt",
".\\TestData\\file6.txt"
};
有没有办法以编程方式确定该物品中有多少物品?我总是可以#define NUM_DATA_FILES 6
或const int NUM_DATA_FILES=6
但是有更好的方法吗?我不认为有,但这似乎太基本了,我想确保我不会忘记一些事情。 。
答案 0 :(得分:11)
const static char *g_szTestDataFiles[] = {
".\\TestData\\file1.txt",
".\\TestData\\file2.txt",
".\\TestData\\file3.txt",
".\\TestData\\file4.txt",
".\\TestData\\file5.txt",
".\\TestData\\file6.txt",
NULL
};
现在互相迭代一个字符串,直到找到NULL。
编辑:格伦是对的,你应该在这里使用std :: vector而不是c style * []
答案 1 :(得分:7)
您可以使用:
sizeof(g_szTestDataFiles) / sizeof(g_szTestDataFiles[0])
请注意,此方法仅在g_szTestDataFiles
是数组而非指针时才有效。
答案 2 :(得分:6)
Arkaitz已经为您提供了处理此问题的首选方法,但正如我们在这里讨论的一个const char *数组,您应该能够执行以下操作:
int size = sizeof(g_szTestDataFiles) / sizeof(g_szTestDataFiles[0]);
答案 3 :(得分:6)
如果你确实在使用C ++,你可能想要使用const vector<string>
,它为你提供了一些很好的抽象和方法。
答案 4 :(得分:2)
您可以使用此功能:
template <typename T, std::size_t N>
inline std::size_t array_size(T (&)[N]) { return N; }
喜欢这里:
std::size_t sz = array_size(g_szTestDataFiles);
无论如何,你应该遵循lhahne建议并使用std :: vector。