[问题] 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