[問題]輸出的結果

看板C_and_CPP (C/C++)作者 (香菇)時間16年前 (2009/06/20 15:50), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串1/1
請問,宣告如下 char s1[3]; char s2[]={'a','b','c'}; char *s3="welcome"; char s4[]="welcome"; cout<<s1<<endl; cout<<s2<<endl; cout<<s3<<endl; cout<<s4<<endl; 輸出結果為 ?" abcwp$> welcome welcome 陣列名稱是常數指標,為什麼輸出不是記憶體位址 還有s2的輸出,不只輸出abc還多了其他的,可以解釋一下那四個真正輸出在記憶體的情形嗎 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.168.104

06/20 15:55, , 1F
用printf
06/20 15:55, 1F

06/20 16:01, , 2F
s2的空間只有3個char, cout遇到char*/char[]時預設會以
06/20 16:01, 2F

06/20 16:02, , 3F
char string的方式輸出, 這相當於把s2當作字串印出來.
06/20 16:02, 3F

06/20 16:02, , 4F
可是s2後面有沒有'\0'的字串結束字元, 所以就被超印了.
06/20 16:02, 4F

06/20 16:03, , 5F
char s2={'a', 'b', 'c', '\0'}; 再cout一次試試試看.
06/20 16:03, 5F

06/20 16:04, , 6F
[] <- 漏打; 其實問題只是cout遇到不同型態的預
06/20 16:04, 6F

06/20 16:04, , 7F
設輸出模式罷了, 要強指定就去查一下cout的用法吧:)
06/20 16:04, 7F

06/21 11:30, , 8F
(void *) & 前幾篇有
06/21 11:30, 8F

06/23 15:07, , 9F
謝謝你們
06/23 15:07, 9F
文章代碼(AID): #1AF9J7u3 (C_and_CPP)
文章代碼(AID): #1AF9J7u3 (C_and_CPP)