[問題] C字串一問

作者: d630200x (DOGE)   2018-09-06 17:55:39
剛剛在網路上看到一個東西
while(*s++ = *t++);
左思右思就是看不懂
後來查了一下,原來這種寫法等價於:
while(*t){
*s = *t;
s++;
t++;
}
*s = *t;
也是這時候才知道C字串有*s++這種寫法
但我還是有兩個問題
1.*s++這種寫法,迴圈似乎不用加入終止條件,是因為C字串中必定有'\0'嗎?
因為我另外還有查到C++中有這種寫法:
while(*s){
cout << *s++;
}
這是代表C/C++中只要在迴圈中遇到'\0'就會作為終止條件嗎?
2.雖然知道兩種寫法是相等的,但請問為何會是相等的?
背後的原理我實在想不透
作者: jerryh001   2018-09-06 18:19:00
C字串結尾必為'\0' 且'\0'的ascii值為0 所以是false2的話可以參考運算子優先度 自己先試著解析看看順序
作者: chuegou (chuegou)   2018-09-06 19:03:00
'\0' 0x00兩個是一樣的 有些平臺NULL也一樣2的問題 我猜你只是指標不熟?
作者: Schottky (順風相送)   2018-09-06 21:42:00
建議不要這樣寫,字串如果沒有\0結尾會很有趣
作者: jerryh001   2018-09-06 22:15:00
有沒\0的字串嗎?(除了自己塞字元進陣列
作者: Schottky (順風相送)   2018-09-06 22:46:00
「惡意使用者」會故意去塞奇怪字串,或者你的程式出bug各位捫心自問,每次吃字串時有沒有檢查長度等等
作者: sweetmiki (只有初音 沒有未來)   2018-09-07 19:42:00
給你的雞雞一雙翅膀 跨國界尻槍
作者: qqq3892005 (ShinyaS)   2018-09-07 19:48:00
雞翅→G翅→G WING→GG WIN→GG double IN→GGININ
作者: dces4212 (flawless)   2018-09-08 23:19:00
這讓我有個疑問 macro裡的字串compiler會幫我們補\0嗎我現在是怕到自己補==
作者: LPH66 (-6.2598534e+18f)   2018-09-09 01:19:00
字串實字 (string literal, 用雙引號寫的) 一定會有 \0
作者: dces4212 (flawless)   2018-09-09 14:00:00
了解 感恩L大
作者: cphe (魔鬼藏在垃圾筒裡)   2018-09-10 14:38:00
這種寫法比較要注意的是邊界,尤其是destination

Links booklink

Contact Us: admin [ a t ] ucptt.com