2009-11-07 74 views
2
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但有沒有更好的方法?我不認爲有,但這似乎太基本,我想確保我不會忘記一些事情。 。 。const char * str []中有多少個字符串?

回答

6

Arkaitz給你處理這個的首選方式,但我們談論爲const char的數組*在這裏,你應該能夠做到以下幾點:

int size = sizeof(g_szTestDataFiles)/sizeof(g_szTestDataFiles[0]); 
+0

偉大的人感謝!我很確定有一種方法可以做到,我只是記不住它。謝謝!! – cchampion 2009-11-07 20:45:48

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風格* []

+1

+1表示技術上正確。雖然這是標籤C++是值得指出的OP應該使用慣用的C++,即std :: vector而不是陣列 – Glen 2009-11-07 20:46:42

7

您可以使用:

sizeof(g_szTestDataFiles)/sizeof(g_szTestDataFiles[0]) 

請注意,此方法僅適用如果g_szTestDataFiles陣列而不是指針

6

如果你確實使用C++,你可能想要使用一個const vector<string>,它給你一些很好的抽象和方法。

+0

是個好主意。 – cchampion 2009-11-07 20:49:42

+0

這是一個好主意,但在當前版本的C++中,您不能在全局範圍聲明'const std :: vector ()',並相應地填充它,除非您希望該向量爲空或由多個一個字符串的副本。 C++ 0x修復了這個問題並允許使用矢量文字。 – 2009-11-07 22:13:25

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 ::向量。

相關問題