社区
C语言
帖子详情
while(*p++ = *q++ != ‘0’)
yht8708
2011-09-13 09:41:26
(实际='0'并不需要,只是问一下)上面这个式子运算顺序是不是先检测*q是否等于0,然后把*q赋给*p,然后while再检测*p的值是否为0?
在编strcat()时,加上这个=‘0’结果就不正确。
...全文
468
14
打赏
收藏
while(*p++ = *q++ != ‘0’)
(实际='0'并不需要,只是问一下)上面这个式子运算顺序是不是先检测*q是否等于0,然后把*q赋给*p,然后while再检测*p的值是否为0? 在编strcat()时,加上这个=‘0’结果就不正确。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
szqh97
2011-09-14
打赏
举报
回复
[Quote=引用 5 楼 yang122610 的回复:]
0 ,'0' ,'\0',null ,“0”要整清楚哦、、、
[/Quote]
++ 应该是'\0'd
yht8708
2011-09-14
打赏
举报
回复
是的,我是想知道这样的话 是先把*q值赋给*p 然后while再取检查*p的值是否为0是吗
[Quote=引用 7 楼 anyidan 的回复:]
while(*p++ = *q++);
标准库中的用法
[/Quote]
cpprogrammer
2011-09-14
打赏
举报
回复
说实话,千万不要这样用。最好把i++或是++i单独写一行,如果非要在while()中包含自增或是自减,
语句应该尽量简洁。
今天刚好看了《 c primer plus》相关的内容,该书作者也是这样建议的,我也觉得他的建议是正确的,
虽然我的编程经验还很少。
上面举了几个例子,说明了不同编译器对类似语句的解释不同,使用须谨慎!
muku9527
2011-09-14
打赏
举报
回复
[Quote=引用 8 楼 matrixcl 的回复:]
while(*p++ = *q++ != '\0')
等价
while(*p++ = (*q++ != '\0'))
这个肯定不是你想要的。
[/Quote]
支持,建议LZ家个括号
wyfwx
2011-09-14
打赏
举报
回复
[Quote=引用 9 楼 yht8708 的回复:]
是的,我是想知道这样的话 是先把*q值赋给*p 然后while再取检查*p的值是否为0是吗
引用 7 楼 anyidan 的回复:
while(*p++ = *q++);
标准库中的用法
[/Quote]
yes
wyfwx
2011-09-14
打赏
举报
回复
直接用 0x0 也可以
matrixcl
2011-09-13
打赏
举报
回复
while(*p++ = *q++ != '\0')
等价
while(*p++ = (*q++ != '\0'))
这个肯定不是你想要的。
AnYidan
2011-09-13
打赏
举报
回复
while(*p++ = *q++);
标准库中的用法
快乐的小菜鸟
2011-09-13
打赏
举报
回复
他们都说这么多了 菜鸟表示 while的用法还是很吸引人的
动感超哥
2011-09-13
打赏
举报
回复
0 ,'0' ,'\0',null ,“0”要整清楚哦、、、
月光的护城河
2011-09-13
打赏
举报
回复
[Quote=引用 1 楼 lvjing_csdn 的回复:]
=运算符是右结合性,这个式子是先把字符'0'赋值给*q,然后把*q的值赋值给*p,赋值完之后p、q各自加一次。whil循环测试的内容是*p,即'0',测试条件成立。
[/Quote]
不对吧,我觉得楼主说的是对的,“!=”的优先级在这里面最高。。
”在编strcat()时,加上这个=‘0’结果就不正确“
'0'和'\0',不是一回事
luciferisnotsatan
2011-09-13
打赏
举报
回复
[Quote=引用 2 楼 lvjing_csdn 的回复:]
楼主注意'0'和'\0',不是一回事。如果你不加=‘0’,当*q==’\0‘时while测试条件就不成立了,就退出了循环。
[/Quote]
++
代码里,应该是 '\0'吧
lvjing_CSDN
2011-09-13
打赏
举报
回复
楼主注意'0'和'\0',不是一回事。如果你不加=‘0’,当*q==’\0‘时while测试条件就不成立了,就退出了循环。
lvjing_CSDN
2011-09-13
打赏
举报
回复
=运算符是右结合性,这个式子是先把字符'0'赋值给*q,然后把*q的值赋值给*p,赋值完之后p、q各自加一次。whil循环测试的内容是*p,即'0',测试条件成立。
while(*p
++
)的执行顺序
[ 测试用例 ] #include <stdio.h> int main() { char *p = "I love China. And I love Chinese food."; char str[100]; char *q = str; while(*q
++
= *p
++
); printf("%s\n", str); ...
strncpy函数自建和while(与指针等问题)
问题描述: strncpy(s1,s2,n)函数从s2复制n个字符给s1,并在必要时截断s2或为其填充额外的空字符。如果 s2的长度等于或者大于n,目标字符串就没有标志结束的空字符。函数返回s1。自己编写这个函数,并在 一个使用循环语句为这个函数提供输入的完整程序中进行测试。 分析: strncpy函数是string.h中所包含的函数,此问题让你自己编写这个函数(c primer
C语言练习题(14) 有以下函数,该函数的功能是( )int fun(char *s) { char *t = s; while(*t
++
); return(t-s); }(非常详细的讲解)
1:有以下函数,该函数的功能是( ) ```c int fun(char *s) { char *t = s; while(*t
++
); return(t-s); } ``` A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数 C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中
C语言自增/自减运算符:从原理到实战,彻底搞懂i
++
与
++
i
自增(
++
)和自减(--)运算符是C语言中用于变量值递增递减的一元运算符,其核心原理在于前置与后置形式对求值顺序和副作用发生时机的影响不同。理解这一机制对于编写高效、安全的底层代码至关重要,尤其在嵌入式开发、系统编程和算法实现等场景中。本文通过大量可运行的代码示例,深入解析了自增运算符在表达式求值、指针运算和循环控制中的经典应用与常见陷阱,帮助你规避因未定义行为导致的程序错误,提升代码质量。
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章