作者Qoofate (大魯閣_最強打者)
看板C_and_CPP
標題Re: [問題] 傳陣列後 能在函數中 計算array大小?
時間Tue Apr 21 21:13:47 2015
※ 引述《Qoofate (大魯閣_最強打者)》之銘言:
: Hi all,
: 小弟想問一下
: 例如
: saveArrayToFile(char* Array,char dst )
: {
: .... 想計算 傳入array的大小 或元素個數,用sizeof(Array)/...
: }
: 但發現好像都算出8byte 指標的大小
: 後來改成saveArrayToFile(char* Array,char dst ,int n)
: 多一個n先計算完後傳進 是可以用
: 但是有辦法在function中 用Array指標 算出大小嗎?
: Thank you~
不好意思 再借問一下
如果傳入的array 是一個固定已經宣告好的固定char array[]={1,2,3,4};
可以在function中計算嗎
小的想到 如果在func中用ptr 指向array ,在去一個個檢查 *(ptr++) 是否等於 null
這樣是否可算出元素個數
------------------------------
自問自答:
靜態array可以 範例如下:
char* ArrayToFile(char* Array,char* dst, int n)
{
int i=0;
char *ptr;
ptr=Array;
while(*ptr!=0)
{
ptr++;
i++;
}
int count=i-1;
printf("array size=%d \n", count);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.176.217.197
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429622031.A.64F.html
→ wenyonba: 不行的,因為傳進函式的是指標喔~~ 04/21 21:20
→ shadow0326: 你要這樣另外算的話可以傳入{1,2,3,4,'\0'} 04/21 21:26
→ MOONRAKER: 這位同學跟你有一樣的問題 #1LBCazZt 基本上是沒出路的 04/21 21:32
→ TobyH4cker: 又是在那檢查null的... 04/21 21:38
→ Push5F: malloc可以這樣搞,但是標準通常會傳入長度增加可讀性 04/21 22:39
→ Push5F: 後來維護的人可能會抓這bug抓到死... 04/21 22:40
※ 編輯: Qoofate (180.176.217.197), 04/21/2015 23:47:00
→ MOONRAKER: 這個好笑,現我有一個陣列宣告成char zv[100]={ 0 } 04/22 02:11
→ MOONRAKER: 傳入你這個function裡面 count會算出多少 04/22 02:12
→ Qoofate: XD 對喔 感謝樓上提醒 ,剛好讀的array都沒有0 才能這樣 04/22 08:45
→ MOONRAKER: 除非你能掌握輸入資料裡面永遠不會有某個特定值 才能 04/22 09:54
→ MOONRAKER: 拿他當guard 而這樣做往往也不利於將來 因為這個guard 04/22 09:56
→ MOONRAKER: 的意思可能會變 如Y2K一到用99當guard的陣列就慘了 04/22 09:58
→ MOONRAKER: 所以這方面就別想了 除了字串這種早就規定好的以外 04/22 09:59
→ TobyH4cker: 靜態array不就利用sizeof()計算好再傳進function就好 04/22 13:32