[問題] Native C++ 混合 C++/CLI

看板C_and_CPP (C/C++)作者 (涅斯)時間14年前 (2011/11/08 16:54), 編輯推噓1(1022)
留言23則, 3人參與, 最新討論串1/1
開發平台(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)

11/08 16:56, , 1F
sizeof(m_str) / sizeof(m_str[0]) 指標大小/字元大小
11/08 16:56, 1F

11/08 16:57, , 2F
想知道字串多長用 strlen()
11/08 16:57, 2F

11/08 17:06, , 3F
謝謝,恢復正常了 :) 不過還是有點不懂,
11/08 17:06, 3F

11/08 17:07, , 4F
sizeof(m_str)如果是指標指的大小,str3不含'\0'
11/08 17:07, 4F

11/08 17:07, , 5F
有8,然後sizeof(m_str[0])字元大小 = 1,除起來 = 8
11/08 17:07, 5F

11/08 17:07, , 6F
不過結果是4,代表sizeof(m_str)的部分是4嗎?
11/08 17:07, 6F

11/08 17:08, , 7F
不過 str3->m_str = "abcdacef",大小不是8嗎?
11/08 17:08, 7F

11/08 17:09, , 8F
因為m_str是一個char*,sizeof(m_str)等於sizeof(char*)
11/08 17:09, 8F

11/08 17:10, , 9F
在你的機器上面char*就是4個bytes 所以才印4
11/08 17:10, 9F

11/08 17:11, , 10F
指標自己的大小 vs 指到字串的長度, 是不一樣的東西,
11/08 17:11, 10F

11/08 17:13, , 11F
字串的長度無法在編譯時期評估, 用 sizeof() 就錯了
11/08 17:13, 11F

11/08 17:24, , 12F
我想再請問一下這個範例 http://pastie.org/2829883
11/08 17:24, 12F

11/08 17:24, , 13F
用 (sizeof pstr) / (sizeof pstr[0]) 求陣列元素個數
11/08 17:24, 13F

11/08 17:24, , 14F
為什麼在這範例中可以用這種寫法
11/08 17:24, 14F

11/08 17:24, , 15F
雖然pstr是 char**,不過應該跟char*一樣
11/08 17:24, 15F

11/08 17:25, , 16F
依據機器會有固定的大小,所以來求個數不是應該也會錯
11/08 17:25, 16F

11/08 17:25, , 17F
誤嗎?
11/08 17:25, 17F

11/08 17:48, , 18F
pstr是char*[] 不是char** 陣列可以用sizeof算整個大小
11/08 17:48, 18F

11/08 17:49, , 19F
比如你的m_str如果宣告成 char m_str[] = "abcdef";
11/08 17:49, 19F

11/08 17:50, , 20F
那sizeof(m_str)就會是7 (含'\0')
11/08 17:50, 20F

11/08 17:51, , 21F
另外如果陣列丟給函式當參數傳遞的話 sizeof也就不會是
11/08 17:51, 21F

11/08 17:51, , 22F
整個陣列的大小了
11/08 17:51, 22F

11/08 17:57, , 23F
瞭解~觀念變得清楚許多了,謝謝:)
11/08 17:57, 23F
文章代碼(AID): #1EkEu_Lc (C_and_CPP)
文章代碼(AID): #1EkEu_Lc (C_and_CPP)