看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) MS VisualStudio 2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) .NET framework類別庫 程式碼(Code):(請善用置底文網頁, 記得排版) http://pastie.org/2829767 *[36m問題(Question):*[m 我宣告一個類別叫做StringOperator,希望能達到類似String的用途 宣告三個此類別的物件分別是 str1, str2, str3 str1跟str2分別放入"abcd"與"acef"的字串,型態使用char* str3是str1與str2的相加。 在建構元的部分會顯示字串的長度以及內容,問題就出在這裡。 不管是多長的字串,都只會顯示Length = 4, 可是str1跟str2應該都還有包含'\0'所以應該要是5, 而str3是"abcdacef"應是9,卻也顯示4 然後我把main函數中str1跟str2的引數改成別的,依然是長度顯示4 請問這是...? 謝謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.24.48 ※ 編輯: Nestarneal 來自: 114.38.24.48 (11/08 16:54)
loveme00835:sizeof(m_str) / sizeof(m_str[0]) 指標大小/字元大小 11/08 16:56
loveme00835:想知道字串多長用 strlen() 11/08 16:57
Nestarneal:謝謝,恢復正常了 :) 不過還是有點不懂, 11/08 17:06
Nestarneal:sizeof(m_str)如果是指標指的大小,str3不含'\0' 11/08 17:07
Nestarneal:有8,然後sizeof(m_str[0])字元大小 = 1,除起來 = 8 11/08 17:07
Nestarneal:不過結果是4,代表sizeof(m_str)的部分是4嗎? 11/08 17:07
Nestarneal:不過 str3->m_str = "abcdacef",大小不是8嗎? 11/08 17:08
shadow0326:因為m_str是一個char*,sizeof(m_str)等於sizeof(char*) 11/08 17:09
shadow0326:在你的機器上面char*就是4個bytes 所以才印4 11/08 17:10
loveme00835:指標自己的大小 vs 指到字串的長度, 是不一樣的東西, 11/08 17:11
loveme00835:字串的長度無法在編譯時期評估, 用 sizeof() 就錯了 11/08 17:13
Nestarneal:我想再請問一下這個範例 http://pastie.org/2829883 11/08 17:24
Nestarneal:用 (sizeof pstr) / (sizeof pstr[0]) 求陣列元素個數 11/08 17:24
Nestarneal:為什麼在這範例中可以用這種寫法 11/08 17:24
Nestarneal:雖然pstr是 char**,不過應該跟char*一樣 11/08 17:24
Nestarneal:依據機器會有固定的大小,所以來求個數不是應該也會錯 11/08 17:25
Nestarneal:誤嗎? 11/08 17:25
shadow0326:pstr是char*[] 不是char** 陣列可以用sizeof算整個大小 11/08 17:48
shadow0326:比如你的m_str如果宣告成 char m_str[] = "abcdef"; 11/08 17:49
shadow0326:那sizeof(m_str)就會是7 (含'\0') 11/08 17:50
shadow0326:另外如果陣列丟給函式當參數傳遞的話 sizeof也就不會是 11/08 17:51
shadow0326:整個陣列的大小了 11/08 17:51
Nestarneal:瞭解~觀念變得清楚許多了,謝謝:) 11/08 17:57