看板 C_and_CPP 關於我們 聯絡資訊
請教各位一個問題 我使用memset做char array初始化 不過有個地方產生了一個疑問,下面是程式碼: //沒問題的版本 char *str = new char [70]; memset(str, 0x31, 70); //有問題的版本 char *str = new char [70]; memset(str, 0x31, strlen(str)); 請問一下,我在第二個地方使用的strlen,結果不是一樣為70嗎? 但是卻只有第一個版本可以成功初始化出字元'1' 而第二個版本卻完全被初始化成0(非字元'0') 請問一下,這是什麼樣的問題?還請各位指點一下 -- ▁▁ Google 女友|██████████████████▕搜尋進階搜尋 | 使用偏好 ▇▇  ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ 搜尋: ⊙所有網頁 ○中文網頁○繁體中文網頁 ○台灣的網頁 所有網頁 約有0項符合女友的查詢結果,以下是第 0項。 共費21年 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.74.245.163
ledia:strlen 是拿來算以 0 結尾的字串長度 11/23 11:26
ledia:剛 new 出來的空間, 內容是什麼不一定, 都是 0 就什麼都不做 11/23 11:26
ledia:(因為 strlen 之後會得到 0) 11/23 11:27
godman362:那再請教一下,那以動態方式宣告的陣列 11/23 11:29
godman362:不就只能給定固定值,而沒辦法用像是sizeof的辦法嗎? 11/23 11:30
twotwoone:你太依賴別人了,很多都是直接查書、搜尋就有的。 11/23 11:51
james732:動態宣告的長度是你自己指定的 把那個值記錄下來就好 11/23 12:00
mysterise:那個strlen目的是在用字串長度 11/23 12:46
mysterise:因為strlen會計算不是0的部份來當作回傳個數 11/23 12:51
littleshan:你改用 vector<char> 就解決了 11/23 12:52
mysterise:你可以試一下char src[70];然後輸入字元在用strlen(src) 11/23 12:52
littleshan:不需要自己 new,不需要 memset 11/23 12:53
mysterise:他應該會根據你輸入的字元長度來計算個數! 11/23 12:53
mysterise:所以BUG就是在這裡!你src沒東西strlen怎麼測出陣列空間 11/23 12:56
mysterise:要改的話!~用sizeof()來用!~他用來你設定空間大小來算的 11/23 12:57
VictorTom:"因為strlen會計算不是0的部份來當作回傳個數" 這段話有 11/23 13:29
VictorTom:相當程度的理解錯誤, 建議直接看221大的連結看strlen到 11/23 13:29
jerohands:new 出來的大小請用 #include<malloc.h> _msize() 11/23 13:29
VictorTom:底讀入什麼回傳什麼, 才能知道使用上有什麼限制與適合用 11/23 13:30
VictorTom:在哪裡; 小弟比較常查看cplusplus網站的, 附個短網址: 11/23 13:31
VictorTom:http://0rz.tw/kLzCR 11/23 13:31
godman362:謝謝各位指點 11/23 14:03
godman362:另外,關於t大的講法,因為在我個人知道的範圍 11/23 14:03
godman362:我只知道動態方式目前沒辦法直接用sizeof的方式取大小 11/23 14:04
godman362:我並不是說都沒有查過書 11/23 14:04
godman362:我是認為版上各位先進或許有辦法,所以才特來請教各位的 11/23 14:04
twotwoone:也許吧,不是限於這個問題,看你以前發的文而談 11/23 14:28
godman362:既然t大您都這樣說了,那我應該為我的無知向各位道歉 11/23 14:51
godman362:但也謝謝各位不厭其煩的給予指導 11/23 14:52