[問題] 使用sizof判斷陣列大小錯誤

看板C_and_CPP作者 ( )時間2年前 (2021/09/10 20:48), 編輯推噓3(308)
留言11則, 5人參與, 2年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) none 問題(Question): 使用sizeof判斷陣列的大小 無論是多少個字元 都是顯示8 bytes 餵入的資料(Input): how 預期的正確結果(Expected Output): 3 錯誤結果(Wrong Output): 8 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) int main() { outstring("How"); } void outstring(char buffer[]) { int n = 0; for (int i = 0; i < sizeof(buffer)/sizeof(buffer[0]); i++) n++; printf("buffer have %d characters\n, n); } 補充說明(Supplement): 最多最多就是讀取8個characters 想了一下還是不太懂為什麼無法使用這個方法 感覺是有什麼觀念漏掉了 希望大家能給予一些觀念上的指導及建議 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.134.205 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1631278122.A.0DF.html

09/10 20:54, 2年前 , 1F
你要用 strlen()
09/10 20:54, 1F

09/10 20:55, 2年前 , 2F
如果不用strlen 請問用sizeof這個方法是可行的嗎?
09/10 20:55, 2F

09/10 20:59, 2年前 , 3F
當然不行,它回傳的是 sizeof(char*) 也就是 4 或 8
09/10 20:59, 3F

09/10 20:59, 2年前 , 4F
Array傳進function的方式是以pointer喔,所以一個poi
09/10 20:59, 4F

09/10 20:59, 2年前 , 5F
nter就是8~
09/10 20:59, 5F

09/10 21:54, 2年前 , 6F
array pointer decay.
09/10 21:54, 6F

09/10 21:57, 2年前 , 7F
void outstring(const char (&buffer)[3])
09/10 21:57, 7F

09/10 21:58, 2年前 , 8F
4
09/10 21:58, 8F

09/11 13:23, 2年前 , 9F
你直接用指標啦
09/11 13:23, 9F

09/11 13:49, 2年前 , 10F
謝謝各位的解答!
09/11 13:49, 10F

09/11 13:49, 2年前 , 11F
直覺想到的解答也是指標 只是想說試試看不同方法
09/11 13:49, 11F
文章代碼(AID): #1XErGg3V (C_and_CPP)