[問題] 小寫轉大寫練習只出現第一個字母?

看板C_and_CPP (C/C++)作者 (好吃的披薩)時間13年前 (2013/01/15 20:17), 編輯推噓8(8020)
留言28則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) eclipse juno @ fedora 18 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 應該沒有 問題(Question): 嗯... 這個其實是上課的習題 程式的內容是載入一段小寫的字串然後輸出大寫 但是照著範例輸入編譯後出來的只會有第一個字母 印象中可以藉由增加鎮列空間的方式解決, 但是在裡面直接加大以後還是只輸出第一個字母 餵入的資料(Input): "happy birthday!" (見底下程式碼) 預期的正確結果(Expected Output): HAPPY BIRTHDAY! 錯誤結果(Wrong Output): H 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> #include <cstring> #include <cctype> using namespace std; char *toUpper(const char *); int main(void) { cout << toUpper("happy birthday!"); return 0; } char *toUpper(const char* ptr) { unsigned len = strlen(ptr); char *newStr = new char[len]; for(unsigned i=0 ; i<len ; i++) *(newStr + i) = toupper(*(ptr+i)); return newStr; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.73.200

01/15 20:19, , 1F
i=0, i<0 ?!
01/15 20:19, 1F

01/15 20:24, , 2F
這樣不是連for迴圈都進不去嗎......還是我哪裡搞錯了0.0?
01/15 20:24, 2F

01/15 20:38, , 3F
結果剛剛在做練習時,居然看到跟你的問題一樣的題目==
01/15 20:38, 3F

01/15 20:38, , 4F
錯了... 是 i<len
01/15 20:38, 4F

01/15 20:39, , 5F
也是旗標的綠皮書嗎XDDD
01/15 20:39, 5F

01/15 20:40, , 6F
恩...為什麼是 new char(len + 1)?
01/15 20:40, 6F

01/15 20:41, , 7F
說好的 new char[len + 1]? 然後記憶體沒釋放
01/15 20:41, 7F

01/15 20:44, , 8F
對了, newStr 結尾沒填 0
01/15 20:44, 8F

01/15 20:48, , 9F
不是,但題目也是要輸入一堆字元然後改成大寫
01/15 20:48, 9F

01/15 20:57, , 10F
我是有個問題,這樣的寫法應該不安全吧??
01/15 20:57, 10F

01/15 20:58, , 11F
在function內new的東西傳給外面接收,但是它應該要
01/15 20:58, 11F

01/15 20:58, , 12F
消滅,這樣到時候可能會出問題??
01/15 20:58, 12F

01/15 21:03, , 13F
http://codepad.org/q1bzEAaf 稍微改了一下
01/15 21:03, 13F

01/15 21:05, , 14F
那個只是沒free的memory leak問題
01/15 21:05, 14F

01/15 21:05, , 15F
重點是 new char()..
01/15 21:05, 15F

01/15 21:48, , 16F
有試過flydragon198的修改, 不過似乎還是一樣...?
01/15 21:48, 16F

01/15 21:50, , 17F
另外不太懂new char的問題是在哪裡...
01/15 21:50, 17F

01/15 21:51, , 18F
你new char後面是接小括號還是中括號?
01/15 21:51, 18F

01/15 21:52, , 19F
小括號是指初始值 中括號才是正確的
01/15 21:52, 19F

01/15 21:52, , 20F
是中括號... 對不起我又打錯了 orz
01/15 21:52, 20F
※ 編輯: yummypixza 來自: 118.170.73.200 (01/15 21:54)

01/15 21:54, , 21F
我剛剛測了一次,那些筆誤修掉後是可以跑出正確的答案的
01/15 21:54, 21F

01/15 21:57, , 22F
要char[len+1]; 要 newStr[len] = 0;
01/15 21:57, 22F

01/15 21:58, , 23F
在 main 中記得把回傳的字串 delete[] 掉
01/15 21:58, 23F

01/15 22:01, , 24F
了解了, 果然是改沒有改全套的結果...
01/15 22:01, 24F

01/15 22:02, , 25F
謝謝各位幫忙大眼瞪小眼 m(v__v)m
01/15 22:02, 25F

01/15 22:03, , 26F
那幫我看一下怎麼解決heap corruption的問題吧 Q_Q
01/15 22:03, 26F

01/16 19:46, , 27F
樓上id豪眼熟@@
01/16 19:46, 27F

01/16 21:38, , 28F
樓上ID也好眼熟 ._.
01/16 21:38, 28F
文章代碼(AID): #1GzKZWXv (C_and_CPP)
文章代碼(AID): #1GzKZWXv (C_and_CPP)