看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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