字符串指针作为函数的参数----实现strcpy()函数

6308阅读 0评论2012-03-15 bill_cao
分类:C/C++

这道程序题很多的公司的笔试题中都会出现。下面是我自己写的一个程序:

#include

 

int cpystr (char *pss, char *pds)

{

         while((*pds=*pss)!='\0')

         {

                   pds++;

                   pss++;

         }

         return 0;

}

int main()

{

         char *pa="nihao",b[10],*pb;

         pb=b;

         cpystr(pa,pb);

         printf("string a=%s\nstring b=%s\n",pa,pb);

         return 0;

}

Cpystr函数的形参是两个字符指针变量。Pss指向源字符串,pds执行目标字符串。

在上面的代码中,程序完成了两项工作:一是把pss指向的源字符串复制到pds所指向的目标字符串中,二是判断所复制的字符是否为’\0’,若是则表明源字符串结束,不再循环。否则,pdspss都加1,指向下一个字符。在主函数中,以指针变量papb为实参,分别取得确定值后调用cpystr()函数。由于采用的指针变量papsspbpds均指向同一字符串,因此在主函数和cpystr函数中均可使用这些字符串。也可以把coystr函数简化为一下形式:

         int cpystr (char *pss, char *pds)

         {

         While((*pds++ = *pss++)!=’\0’);

         return 0;

         }

即把指针的移动和赋值合并在一个语句中。进一步分析还可以发现’\0’ASCII码为0,对于while语句只看表达式的值为非0就循环,为0则结束循环,因此也可以省去”!=’\0’ ”这个判断部分,而写为一下形式:

         int cpystr (char *pss, char *pds)

         {

                  While(*pds++ = *pss++);

                  return 0;

         }

         表达式的意义可解释为,源字符串向目标字符串赋值,移动指针,若所有赋值为非0则循环,否则结束循环。这样是程序更加的简洁。简化后的源程序就非常的简洁了。

 

 

上一篇:Linux系统新手学习的11点建议
下一篇:在u-boot中添加命令