c语言实现字符串拷贝功能,C语言stringcopy()的底层实现

字符串常量实际上是个字符数组,比如 welcome to www.nowamagic.net 就是个字符数组,并且以 '\0' 结尾。

字符串串常量的一个常见的用法就是作为函数参数,比如常见的 printf("welcome to www.nowamagic.net"); 字符串参数实际上是通过字符指针访问该字符串的。这里的 printf() 函数接受的是一个指向字符数组第一个字符的指针。字符串常量是可以通过指向其第一个元素的指针来访问的。

下面程序中的函数 stringcopy(char *source, char *target) 实现的功能是,把指针 target 指向的字符串复制到指针 source 指向的位置。

#include

void stringcopy(char *source, char *target);

int main()

{

char str_a[] = "Welcome to www.nowamagic.net";

char str_b[] = "";

int wait;

printf("str_a为 %s \n", str_a);

printf("str_b为 %s \n", str_b);

stringcopy(str_b, str_a);

printf("调用函数后 \n");

printf("str_a为 %s \n", str_a);

printf("str_b为 %s \n", str_b);

scanf("%d", &wait);

}

void stringcopy(char *source, char *target)

{

int i;

i = 0;

while((source[i] = target[i]) != '\0')

i++;

}

程序运行结果:

str_a为 Welcome to www.nowamagic.net

str_b为

调用函数后

str_a为 o www.nowamagic.net

str_b为 Welcome to www.nowamagic.net

因为参数是通过值传递的,source 和 target 在循环中每执行一次,它们就沿着相应的数组前进一个字符,直到将 targrt 中的结束符 '\0' 复制到 source 为止。

经验丰富的程序员则喜欢像下面那样写:

void stringcopy(char *source, char *target)

{

while((*source++ = *target++) != '\0')

;

}

在这个函数中,source 和 target 的自增运算放到了循环的测试部分。

可以进一步精炼程序,表达式同 '\0' 的比较是多余的,只需要判断表达式的值是否为0即可。

void stringcopy(char *source, char *target)

{

while(*source++ = *target++)

;

}

这样的写法看起来不容易理解,但这种写法是有其好处,C语言程序经常采用这种写法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值