我等的輸入功能:如何查找C中動態2D char數組中的行數?
int func(char* s[])
{
// return number of rows in the character array s
}
在字符數組s的隨機作爲用於例如提供:{ 「sdadd」, 「dsdsd」, 「dsffsf」, 「ffsffsf」}。
這裏輸出應該是4以上例子。
我等的輸入功能:如何查找C中動態2D char數組中的行數?
int func(char* s[])
{
// return number of rows in the character array s
}
在字符數組s的隨機作爲用於例如提供:{ 「sdadd」, 「dsdsd」, 「dsffsf」, 「ffsffsf」}。
這裏輸出應該是4以上例子。
傳遞字符串數組需要更多信息...
這類似於你會發現在輸入說int main(int argc, char *argv[])
通話。例外情況是,當調用main()
時,它讀取命令行並在argc中提供計數信息至,確定參數的數量爲argv[]
。這就是爲什麼char *argv[]
參數可以通過。
您有相同的要求。那就是當傳遞一個參數如char *s[]
,也就是說,你必須以某種方式提供一個值告訴func()
有多少個字符串。 C沒有辦法知道變量中的字符串數量。這是因爲數組引用(char * s [];)衰減爲指向char(char * s;)的指針,指向該數組的第一個元素,即沒有數組大小信息。
所以,回答你的問題是:,給定的信息,func()
無法確定s
串的數量。
的一個重要區別:
大小CAN字符數組來確定,如
char *s[]={"this","is","an","array"}; // the assignment of values in {...}
//make this an array of strings.
但只有當s
在同一範圍內的被聲明函數試圖確定元素的數量。如果條件滿足,那麼使用:
int size = sizeof(s)/sizeof(s[0]); //only works for char arrays, not char *
//and only when declared and defined in scope of the call
在範圍,在這種情況下,簡單的說就是字符* S [] ...與全球知名度定義,或在功能計算元素的數量。如果作爲參數傳遞,那麼上面定義的char * s [];將被簡單地看作char * s,並且參數的個數不能確定。
爲一個字符串數組檢索字符串的計數的其他選項包括:
1)修改您的輸入數組,這樣的東西最後一個字符串中是獨一無二的,像「%」或「 \ 0" 。這將允許您使用標準C字符串函數測試字符串。
2)在提供字符串數的函數中包含參數。 (例如,類似於main(...)
或printf(...)
)
int size = sizeof(s)/sizeof(s[0]);
這一說法。可變大小將被分配*s[]
中存在的字符串的數量。
與C中的所有數組參數一樣,沒有辦法這麼做,因爲當作爲函數參數傳遞時,數組會衰減爲指向其第一個元素的指針(有關C FAQ的討論,請參見http://c-faq.com/aryptr/)。
一如既往在這種情況下,你有兩種可能性。
使用結束標記。如果數組的元素類型可以保存一個特殊的值,那麼對於那個類型就不會「自然地」出現,這總是有效的。對於'\ 0'的字符,對於你的數組中的NULL指針,空指針。例如argv[]
,main()
的第二個參數,由空指針終止。這使得迭代變得容易:
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i=0; argv[i] != NULL; i++)
{
printf("%s\n", argv[i]);
}
return 0;
}
傳遞一個長度信息與數組。有意思的是,C運行庫中的信息在argc中也傳遞給main()
。
除此之外沒有(或至少沒有便攜式)的方法來知道有多少個元素的數組已被作爲一個參數中C.傳遞到功能
通常(例如,在主要的'argv'),那麼可以讓指針數組中的最後一個元素爲空指針,這樣遍歷它就等於測試null:'for(int i = 0; s [i]; i ++){/ * use s [i] * /}'。初始化看起來像「{」sdadd「,」dsdsd「,」dsffsf「,」ffsffsf「,NULL}' –