刚刚在网络上看到一个东西
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的问题 我猜你只是指标不熟?
作者: jerryh001 2018-09-06 22:15:00
有没\0的字串吗?(除了自己塞字符进阵列
“恶意使用者”会故意去塞奇怪字串,或者你的程式出bug各位扪心自问,每次吃字串时有没有检查长度等等
作者:
sweetmiki (只有初音 没有未来)
2018-09-07 19:42: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