字符串复制
void strcpy(char *s,char *t)
{
while(*s++=*t++)
;
}
这段代码跟字符串复制有什么关系?为什么在判断条件里用赋值呢?循环体怎么是空语句啊?
下面911来解释一下上述代码吧。
其执行步骤如下:
1)*s=*t,复制字符
2)判断*s是否为真。若为假,则退出循环;否则执行第3)步。因为c语言里字符串是以字符数组的形式存储的,并且其结尾是"\0"(NULL)。在ASCII编码里,NULL=0,遇到NULL时,也就是*s为假。
3)s和t自增1,指向下一个地址,执行第一步。
上面的代码在语义上等于下面的代码:
while((*t) != 0){
*s = *t;
s++;
t++;
}
{
while(*s++=*t++)
;
}
这段代码跟字符串复制有什么关系?为什么在判断条件里用赋值呢?循环体怎么是空语句啊?
下面911来解释一下上述代码吧。
其执行步骤如下:
1)*s=*t,复制字符
2)判断*s是否为真。若为假,则退出循环;否则执行第3)步。因为c语言里字符串是以字符数组的形式存储的,并且其结尾是"\0"(NULL)。在ASCII编码里,NULL=0,遇到NULL时,也就是*s为假。
3)s和t自增1,指向下一个地址,执行第一步。
上面的代码在语义上等于下面的代码:
while((*t) != 0){
*s = *t;
s++;
t++;
}