#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void main01()
{
//通过栈的方式对数据进行拷贝
char a[] = "i am a student";
char b[64];
int i = 0;
for (i=0; *(a+i) != '\0'; i++)
{
*(b+i) = *(a+i);
}
//0没有copy到b的buf中.
b[i] = '\0'; //重要
printf("a:%s \n", a);
printf("b:%s \n", b);
system("pause");
return ;
}
//字符串copy函数技术推演
//copy函数的第一种形式
//form形参 形参to 的值 不停的在变化....
//不断的修改了from和to的指向
void copy_str01(char *from, char *to)
{
for (; *from!='\0'; from++, to++)
{
*to = *from;
}
*to = '\0';
return ;
}
//copy函数的第二种形式
//*操作 和++的操作 ++ 优先级高
void copy_str02(char *from, char *to)
{
for (; *from!='\0';)
{
*to++ = *from++; // 先 *to = *from; 再from++, to++
}
*to = '\0'; //
return ;
}
//copy函数的第三种形式
//不需要最后添加0
void copy_str03(char *from, char *to)
{
while( (*to = *from) != '\0' )
{
from ++;
to ++;
}
}
//copy函数的第四种形式
//直接在判断条件中进行操作
void copy_str04(char *from , char *to)
{
while ( (*to++ = *from++) != '\0')
{
;
}
}
//copy函数的第五种形式
//在判断条件中直接得到结果,不需要得到比较的结果
void copy_str05(char *from , char *to)
{
//*(0) = 'a';
while ( (*to++ = *from++) )
{
;
}
}
//直接改变传入的实参的值是不恰当的做法
void copy_str25_err(char *from , char *to)
{
//*(0) = 'a';
while ( (*to++ = *from++) )
{
;
}
printf("from:%s \n", from);
}
//不要轻易改变形参的值, 要引入一个辅助的指针变量. 把形参给接过来.....
int copy_str26_good(char *from , char *to)
{
//*(0) = 'a';
char *tmpfrom = from;
char *tmpto = to;
if ( from == NULL || to == NULL)
{
return -1;
}
while ( *tmpto++ = *tmpfrom++ ) ; //空语句
printf("from:%s \n", from);
}
int main02()
{
int ret = 0;
char *from = "abcd";
char buf2[100];
//copy_str21(from, buf2);
//copy_str22(from,buf2);
//copy_str23(from, buf2);
//copy_str24(from, buf2);
//copy_str25(from ,buf2);
//printf("buf2:%s \n", buf2);
{
//错误案例
char *myto = NULL; //要分配内存
//copy_str25(from,myto );
}
{
char *myto = NULL; //要分配内存
ret = copy_str26_good(from, myto);
if (ret != 0)
{
printf("func copy_str26_good() err:%d ", ret);
return ret;
}
}
system("pause");
return ret;
}
int main03()
{
int ret = 0;
char *from = "abcd";
char buf2[100];
printf("copy_str25_err begin\n");
copy_str25_err(from, buf2);
copy_str26_good(from, buf2);
printf("copy_str25_err end\n");
return 0;
}