2012-02-09 98 views
0

是否有CPP任何內置的功能,可以給我一個二維字符數組函數在cpp中查找2d字符串數組的長度?

爲前的長度,爲ARGS功能

const char* args[] = {"412", "..7", ".58", "7.8", "32.", "6..", "351", "3.9", "985", "...", ".46"} 

應該返回11

+0

http://ideone.com/ruKX3 – 2012-02-09 22:17:25

+0

沒有實際功能,由於使用陣列作爲函數參數使其衰減到一個指針。答案中給出的宏可以用在數組的作用域中。 – 2012-02-09 22:19:42

+0

@大衛:如果你通過引用傳遞數組不會衰減。 – 2012-02-09 22:21:12

回答

4

這會給出args中元素的個數:

sizeof(args)/sizeof(args[0]) 
+0

我注意到,即使你選擇了其他新的方法之一,你也應該記住這個習慣用法,因爲你會在大量舊的C++和C代碼中遇到它。 – Keith 2012-02-09 22:31:21

+0

是的,它的工作原理,謝謝 – rohanag 2012-02-10 19:42:23

1

sizeof(args)/sizeof(*args)

7

我喜歡爲此use a template function

template <typename T, std::size_t N> 
std::size_t size(T(&)[N]) { return N; } 

在使用sizeof的方法的優點是,你可以不小心用指針做。

+0

Bah,你和你的花哨模板的東西:) – 2012-02-09 22:26:53

+1

+1特別是,這個版本傳遞指針時無法編譯。另一種選擇是sizeof A [sizeof A [0]),當傳遞指針時返回錯誤的數字。不能編譯總是比給出錯誤的答案好。 – 2012-02-09 23:00:29

+0

我試過 'sizeof(args)/ sizeof(args [0]);' 它工作:) 我不想去模板,我不知道如何初始化它們中的2d字符串數組。 – rohanag 2012-02-10 19:40:33

2

在C++ 11可以使用:

std::end(args) - std::begin(args)