C语言stringcopy()的底层实现

C 程序设计:字符串复制
服务器君一共花费了236.946 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

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

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

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

#include <stdio.h>
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语言程序经常采用这种写法。

本文地址:http://www.nowamagic.net/librarys/veda/detail/484,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/484

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《代码大全(第2版)》 史蒂夫•迈克康奈尔 (Steve McConnell) (作者), 金戈 (译者)

代码大全(第2版)是著名IT畅销书作者、《IEEE Software》杂志前主编、具有20年编程与项目管理经验的Steve McConnell十余年前的经典著作的全新演绎:第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种实践方法。

更多计算机宝库...