[問題] 有計算陣列長度的函數嗎?

看板C_and_CPP作者 (Yes We Can!)時間15年前 (2009/11/17 16:02), 編輯推噓2(208)
留言10則, 7人參與, 最新討論串1/2 (看更多)
如題 我知道strlen可以計算串列長度,可是陣列沒辦法 我實際跑了,結果也是錯的。 int main(int argc, char *argv[]) { int a[3]={3,1,1}; char b[9]; char *str="1234"; printf("%d",strlen(b)); system("PAUSE"); return 0; } 例如這樣,如果是strlen(str)這樣就可以 那有可以計算陣列長度的函示嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.203.30

11/18 00:04, , 1F
strlen()可以是因為他假設結尾一定有'\0'
11/18 00:04, 1F

11/18 00:04, , 2F
沒有,你必須自己用變數或常數記住那個數字。
11/18 00:04, 2F

11/18 00:04, , 3F
int array : sizeof(ArrayName) / 4
11/18 00:04, 3F

11/18 00:04, , 4F
strlen看到\0才會停止。
11/18 00:04, 4F

11/18 00:04, , 5F
在一般的陣列中不會這樣,但若你能保證也許就可以
11/18 00:04, 5F

11/18 00:05, , 6F
阿 對 我忘了strlen是看\0的 感謝
11/18 00:05, 6F

11/18 00:07, , 7F
在你的情況裡可以用 sizeof
11/18 00:07, 7F

11/18 00:11, , 8F
但是傳到外面去 3F 的算法就失效了,而且正確的寫法應該
11/18 00:11, 8F

11/18 00:11, , 9F
是 / sizeof(int) 而不是直接寫 4,總之自己紀錄就對了。
11/18 00:11, 9F

11/18 00:21, , 10F
用sized array, 或是改用C++的vector
11/18 00:21, 10F
文章代碼(AID): #1B0iZ-am (C_and_CPP)
文章代碼(AID): #1B0iZ-am (C_and_CPP)