回答
將數組長度傳遞給函數後無需額外努力就無法找到數組的長度。你需要:
- 使用的容器存儲的大小,如
vector
(推薦)。 - 傳遞大小。這可能需要對現有代碼進行最少的修改,並且是最快的修復。
- 使用標記值,如C字符串做。這使得查找數組的長度爲線性時間操作,並且如果您忘記了標記值,您的程序可能會崩潰。這是在大多數情況下最糟糕的方式。
- 使用模板在傳遞數組時減去數組的大小。你可以在這裏讀到它:How does this Array Size Template Work?
如果你想知道,大多數人感到遺憾的是C字符串以這種方式工作。
因此他們發明了B字符串。 –
@MooingDuck鏈接請:)谷歌是關於這個問題的媽媽 –
Apperently的正確名稱爲[BSTR(http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(V = vs.85 )的.aspx)(討厭的人比C字符串) –
當你通過一個數組有不是一個簡單的方法來確定函數內的大小。
您可以傳遞數組大小作爲一個參數 或 使用的std ::矢量<的std :: string>
如果你感覺特別冒險可以使用some advanced template techniques
簡而言之,它看起來像
template <typename T, size_t N>
void YourFunction(T (&array)[N])
{
size_t myarraysize = N;
}
是的,這就是我目前正在做什麼,但我想刪除多餘的paramater。哦,還有 – bubbles
還有一個std :: array
@bubbles'int main(argc,char ** argv)'。如果它很簡單,主要做法會有所不同。 –
如果你的意思是所有字符串添加到集合中的時間有多長。
int n=2;
int size=0;
char* array [n] = { "One", "Two"};
for (int i=0;i<n;++i)
size += strlen(array[i];
補充:
是那目前在做什麼IM,但我想刪除多餘的 paramater。哦,很好 -
可能會得到一個不好的迴應,但你總是可以使用第一個指針來存儲大小,只要你不尊重它或錯誤它實際上是一個指針。
char* array [] = { (char*)2,"One", "Two"};
long size=(long)array[0];
for(int i=1; i<= size;++i)
printf("%s",array[i]);
或者你可以NULL終止您的陣列
的char *數組[] = { 「一」, 「二」,(字符*)0};
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
從指針獲取數組大小是不可能的。你可以用NULL指針終止數組。這樣你的函數可以搜索NULL指針來知道大小,或者乾脆停止處理輸入,一旦它達到NULL ...
C在你背後做了一些詭計。
void foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
這兩個是相同的:
6.3.2.1.3:除了當它是sizeof運算符的操作數或一元&操作者, 或是用於初始化一個字符串文字一個數組,具有類型爲''的類型爲 ''的數組的表達式被轉換爲類型爲''的指針的類型爲'' 的表達式,該表達式指向數組對象的初始元素並且不是左值。如果 數組對象具有寄存器存儲類,則行爲是未定義的。
其結果是,不知道,內部foo()
或bar()
,如果你 調用陣列,陣列的一部分,或一個指向單個 整數:
int a[10];
int b[10];
int c;
foo(a);
foo(&b[1]);
foo(&c);
有些人喜歡寫自己的功能,如:void foo(int *array)
只是提醒自己,他們並沒有真正傳遞了陣列, 而是指向一個整數的指針,可能有或沒有更多 附近的其他地方。有些人喜歡編寫他們的功能 ,比如:,以便更好地提醒自己 函數期望傳遞給它。不管你喜歡這樣做,如果你想知道你的 陣列多久哪種方式
,你有幾種選擇:
- 通行證沿長度paramenter了。 (Think
int main(int argc, char *argv
))。 - 設計你的數組,使得每個元素不是
NULL
,除了最後一個 元素。 (想想char *s="almost a string";
或execve(2)
。) - 設計你的函數,這樣它需要一些 參數的其他描述符。 (認爲
printf("%s%i", "hello", 10);
- 字符串描述 其他參數。printf(3)
使用stdarg(3)
參數處理,但 它可能很容易是一個數組。)
瑣事:'argv'確實指向了1和2。 – u0b34a0f6ae
使用新的C++ 11的std ::陣列
http://www.cplusplus.com/reference/stl/array/
標準數組大小的方法你想找的
- 1. 如何查找char數組的長度?
- 2. C++如何使用find函數查找char數組中的char?
- 3. c,查找指針數組的長度
- 4. 如何查找數組類的長度?
- 5. 在mongodb中查找數組的長度
- 6. C中的char數組如何找到有效輸入的實際長度?
- 7. 在C++中查找char *數組中的char *元素
- 8. 如何查找C中動態2D char數組中的行數?
- 9. 在postgres中查找數組長度
- 10. 如何在ActionScript 3.0中查找關聯數組的長度?
- 11. 如何在PowerShell中創建可變長度的char數組?
- 12. 如何在char數組之前查找char數組中的空格?
- 13. 如何在unix shell中查找數組長度?
- 14. sizeof char /數組長度C中的內存分配,
- 15. C Char陣列Userinput檢查長度
- 16. 如何找出數組的長度?
- 17. 如何找出NSData數組的長度?
- 18. 如何在C中獲取未知長度的char *?
- 19. 如何將char數組轉換爲C中的長變量?
- 20. 函數在cpp中查找2d字符串數組的長度?
- 21. 查找C#中的MP3長度
- 22. 如何查找SparkR中列的長度
- 23. 如何在C++中打印char數組
- 24. char數組和字符串長度
- 25. C編程查找長度爲2的二維數組
- 26. 數組長度
- 27. 如何查找文字數組的長度?
- 28. 如何查找手柄模板內的數組長度?
- 29. 如何查找數組列表的長度?
- 30. 如何查找字符串數組的長度?
焦炭星級==字符指針 –
順便說一句,使用'I'代替'i'可能有助於避免「這是一個合理的問題」啓發式(除了讓英語母語人士更容易閱讀這個問題)。 – sarnold