const char * str []中有多少个字符串?

时间:2009-11-07 20:34:28

标签: c++ arrays

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 6const int NUM_DATA_FILES=6但是有更好的方法吗?我不认为有,但这似乎太基本了,我想确保我不会忘记一些事情。 。

5 个答案:

答案 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。