Re: [問題] 傳陣列後 能在函數中 計算array大小?

看板C_and_CPP (C/C++)作者 (大魯閣_最強打者)時間11年前 (2015/04/21 21:13), 11年前編輯推噓0(0014)
留言14則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/21 21:20, , 1F
不行的,因為傳進函式的是指標喔~~
04/21 21:20, 1F

04/21 21:26, , 2F
你要這樣另外算的話可以傳入{1,2,3,4,'\0'}
04/21 21:26, 2F

04/21 21:32, , 3F
這位同學跟你有一樣的問題 #1LBCazZt 基本上是沒出路的
04/21 21:32, 3F

04/21 21:38, , 4F
又是在那檢查null的...
04/21 21:38, 4F

04/21 22:39, , 5F
malloc可以這樣搞,但是標準通常會傳入長度增加可讀性
04/21 22:39, 5F

04/21 22:40, , 6F
後來維護的人可能會抓這bug抓到死...
04/21 22:40, 6F
※ 編輯: Qoofate (180.176.217.197), 04/21/2015 23:47:00

04/22 02:11, , 7F
這個好笑,現我有一個陣列宣告成char zv[100]={ 0 }
04/22 02:11, 7F

04/22 02:12, , 8F
傳入你這個function裡面 count會算出多少
04/22 02:12, 8F

04/22 08:45, , 9F
XD 對喔 感謝樓上提醒 ,剛好讀的array都沒有0 才能這樣
04/22 08:45, 9F

04/22 09:54, , 10F
除非你能掌握輸入資料裡面永遠不會有某個特定值 才能
04/22 09:54, 10F

04/22 09:56, , 11F
拿他當guard 而這樣做往往也不利於將來 因為這個guard
04/22 09:56, 11F

04/22 09:58, , 12F
的意思可能會變 如Y2K一到用99當guard的陣列就慘了
04/22 09:58, 12F

04/22 09:59, , 13F
所以這方面就別想了 除了字串這種早就規定好的以外
04/22 09:59, 13F

04/22 13:32, , 14F
靜態array不就利用sizeof()計算好再傳進function就好
04/22 13:32, 14F
文章代碼(AID): #1LDaqFPF (C_and_CPP)
文章代碼(AID): #1LDaqFPF (C_and_CPP)