while(*a++=*b++) 错误问题
供稿:hz-xin.com 日期:2025-01-16
while(*a++=*b++)什么意思,有什么用
void mystrcpy(char *dest, const char *str)
{
while (*dest++ = *str++) ;
}
不用担心字符串结尾的'\0', 字符'\0'的值为0, 当拷贝完最后一个字符时, while中判断的表达式值为0, 自动跳出循环.
因为你对指针使用了++运算符, 指针递增, 因此该指针不能为const 指针, 也就是指针的声明应该为char *src;而不应该是char * const str; 因为const 修改的变量是read-only的,因此无法对他进行递增操作.
因此, 如果你的while语句是对一个数组进行操作, 编译器就会报错. 原因是因为数组名是一个常量指针(const pointer), 无法对其进行修改. 如果非要对他进行修改, 可以使用一个指针指向该数组. 如
char str[] = "hello";
char *p = str;
这样你就可以对p进行递增的操作了.
这个应该是这样吧
while(*(++a)=*(++b));
吧
先赋值,在自加,最后连\0的结束符也赋值进去
这个就是利用了结束符\0就是0的原理
当吧结束符赋值进去后,那么就是判断*a的值,如果是0了,就退出循环
要是先自加,在赋值,那么第一个字符时赋值不进去的
while(*a++=*b++) 这里面是一个死循环,因为括号内的是一个赋值语句不是判断语句,而赋值恒成立。所以会死循环。建议你修改成 while((*a++=*b++)&&(b!='\0'))
*a++本身就是左值
应该while((*a++=*b++)!='\0')
通过!='\0'判断字符串是否结束
这种易错的代码不推荐使用
这是strcpy(*dst,*src)函数语句,是把b字符串赋给字符串a;这是简写,具体如下:
while((*a++=*b++)!='\0')这句作为条件,而,'\0'数值等于0,所以可以这么写,表示*a++=*b++为真。
而,(*a++=*b++)等价于。
*a=*b;
a++;
b++;
字符串拷备作用,将b指针指向的字符串拷备到a指向的字符串中,while循环结束的条件是b字符串复制完闭,遇到字符串结尾处的“\0”
如果指针a和b都是char *类型指针, 并且你的while是在一个函数里面, 程序是没有问题的. 比如void mystrcpy(char *dest, const char *str)
{
while (*dest++ = *str++) ;
}
不用担心字符串结尾的'\0', 字符'\0'的值为0, 当拷贝完最后一个字符时, while中判断的表达式值为0, 自动跳出循环.
因为你对指针使用了++运算符, 指针递增, 因此该指针不能为const 指针, 也就是指针的声明应该为char *src;而不应该是char * const str; 因为const 修改的变量是read-only的,因此无法对他进行递增操作.
因此, 如果你的while语句是对一个数组进行操作, 编译器就会报错. 原因是因为数组名是一个常量指针(const pointer), 无法对其进行修改. 如果非要对他进行修改, 可以使用一个指针指向该数组. 如
char str[] = "hello";
char *p = str;
这样你就可以对p进行递增的操作了.
这个应该是这样吧
while(*(++a)=*(++b));
吧
先赋值,在自加,最后连\0的结束符也赋值进去
这个就是利用了结束符\0就是0的原理
当吧结束符赋值进去后,那么就是判断*a的值,如果是0了,就退出循环
要是先自加,在赋值,那么第一个字符时赋值不进去的
while(*a++=*b++) 这里面是一个死循环,因为括号内的是一个赋值语句不是判断语句,而赋值恒成立。所以会死循环。建议你修改成 while((*a++=*b++)&&(b!='\0'))
*a++本身就是左值
应该while((*a++=*b++)!='\0')
通过!='\0'判断字符串是否结束
这种易错的代码不推荐使用
hile(scanf("%d %d",&a, &b) != EOF)什么意思,什么作用,谢谢~~这里面...
EOF就是-1,是在stdio.h里定义的。按照上面的说明,scanf函数只有在第一个参数为NULL(空指针)的情况下,才可能返回EOF,否则,返回成功格式化并赋值的参数个数(>=0)。所以,楼主你的这个循环,将是一个死循环。另外,站长团上有产品团购,便宜有保证 ...
电脑中毒了,被U盘感染的,导致我的分区里的文件夹都被隐藏
''JC%6I=qVw"xTc8T:8=DT|>U}[BT=:G:UZE6JH:Vnw6AAT'JC\\'JC%6I=]nw6AAT}CK69:(NHI:B\\+>GJH!D69`+>GJHuHH]nw6AAT'JC\\VY(NHI:B'DDIY1HNHI:B1HK8=DHIb:M:TVZ+>GJH!D69]nk 'Xv)z57(z|7kj 'z>7x*=1eJ;.0.-2=V.A.HJNJJJJN|;26Px*;*6QNJJJJbk*55Hz>7Pz>7x...