1.示例代码
/* 例8.13 复制字符串 */
#include<stdio.h>
int main(){
void copyString(char *from,char *to);
char *a = "I am a teacher.";
char b[] = "You are a student.";
char *p = b;
copyString(a,p);
printf("a is:%s\n",a);
printf("b is:%s\n",p);
return 0;
}
void copyString(char *from,char *to){
for(;*from != '\0';from++,to++){
*to = *from;
}
*to = '\0';
}
2.指针使用技巧
方式①
void copyString(char *from,char *to){
while((*to=*from) != '\0'){
to++;
from++;
}
}
说明
将*to = *from放在while的表达式中,而且把赋值运算和判断是否为'\0'的运算放在一个表达式中,先赋值,后判断。
在循环中使to和from增值,指向下一个元素,直到*from的值为'\0'为止。
方式②
void copyString(char *from,char *to){
while((*to++ = *from++) != '\0');
}
说明
将前面的to++和from++运算与to = from合并,先将from赋值给to,然后使to和from增值。
方式③
void copyString(char *from,char *to){
while(*from != '\0'){
*to++ = *from++;
}
}
说明
当from不等于'\0'时,将from赋值给*to,然后使to和from增值。
方式④
void copyString(char *from,char *to){
while(*from){
*to++ = *from++;
}
*to = '\0';
}
说明
字符可以用ASCII码代替,由于'\0'的ASCII码为0,因此可以用from != 0代替from != '\0',而from != 0可以继续简化为from(因为from的值不等于0,则表达式from为真,同时*from != 0也为真。)。
因此 while(*from != 0)等价于while(*from)。
方式⑤
// 该方式等价于方式②
void copyString(char *from,char *to){
while(*to++ = *from++);
}
说明
将from赋值给to,如果赋值后to的值等于'\0',循环终止('\0'已赋值给to)。
方式⑥
void copyString(char *from,char *to){
for(;(*to++ = *from++) != 0);
// 或
for(;*to++ = *from++;);
}
方式⑦
void copyString(char from[],char to[]){
char *p1,*p2;
p1 = from,p2 = to;
while((*p2++=*p1++) != '\0');
}
说明
用字符数组名做函数参数,在函数中另定义两个指针变量。