c语言程序设计 字符串拷贝拷贝演变与初衷

/*v1*/void strcpy(char *s, char *t){  int i;    i = 0;  while((s[i] = t[i]) != ‘\0‘)    i++;}

/*v2*/void strcpy(char *s, char *t){  while((*s = *t) != ‘\0‘){    s++;    t++;   }}

/*v3*/void strcpy(char *s, char *t){  while((*s++ = *t++) != ‘\0‘)    ;}

/*v4:final verison in <<The C Programming Language>>2nd*/void strcpy(char *s, char *t){  while(*s++ = *t++)    ;}

实际上以上版本还演变到实际面试当中碰到的:/*v4*/void strcpy(char *s, const char *t){  while(*s++ = *t++)    ;}

/*v5*/char* strcpy(char *s, const char *t){  char *sCopy = s;  while(*s++ = *t++)    ;  return sCopy; }

/*v5*/char* strcpy(char *s, const char *t){  if(s==NULL || t==NULL)    return NULL;

  char *sCopy = s;  while(*s++ = *t++)    ;  return sCopy;}

今天总结如下(希望今后补充):v1:数组加下标,虽然使用了一个局部变量,但是代码易读。v2:修改为简单的指针版本。v3:这才是是K&D在书中想强调的。就是++的使用会让代码简洁。v4:在目前mac下gcc编译器会给出警告

警告信息:warning: using the result of an assignment as a condition without parentheses [-Wparentheses]        while(*dest++ = *src++)

编译器信息:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1

Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)

Target: x86_64-apple-darwin14.1.0

Thread model: posix

v5:形参的改变会不会该变以往使用c语言标准库的程序,但是就函数功能而言,这样的改变是正确的。v6:这里涉及到一个问题,空串检查是不是strcpy份内的事情。
时间: 2024-10-16 23:13:44

c语言程序设计 字符串拷贝拷贝演变与初衷的相关文章

C语言中的位拷贝与值拷贝浅谈(转载)

注:C语言实现的PHP变量的赋值过程中,就涉及到了 深拷贝和浅拷贝 位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(深拷贝).深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝. 位拷贝,及"bitwise assignment"是指将一个对象的内存映像按位原封不动的复制给另一个对象,所谓值拷贝就是指,将原对象的值复制一份给新对象. 在用"bitwise assig

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

iOS开发入门 ? C语言(字符串、字符串数组、命令行参数)

字符串 1. 概念 用双引号引起来的就是字符串 "a string" //C语言编译器会将两个并列的字符串自动拼接成一个字符串 "a string""another a string" // \是换行连接的标记(一行不够写) "a looooooooooong \ string" 常见ASCII编码: 'A' == 65    'a' == 97    '0' == 48    '\0' == 0 int a[10]; //表

D语言中字符串的操作

字符串的操作在软件开发中是特别重要的一个事情,因为基本上的编程都会使用到字符串,字符串操作的好坏决定着一个语言的好与差.在我做过的一个项目中曾经就出现过字符串操作性能问题. D语言字符串有 string,wstring,dstring三种类型,在D语言中字符串是使用字符数组定义的,三种类型分别对应char,wchar,dchar.char只有一个字节,wchar为双字节,dchar为三字节.对字符串的操作也相当于是对数组的操作,这跟其它语言不一样,C++中字符串是以string类来进行封装,它的

C语言里字符串的解析

原文网摘:http://www.cnblogs.com/yi-meng/p/3620244.html#undefined 根据给定的字符串,按照一定规则解析字符串,卡住好几次,这次做个笔记,以供参考 函数名称:   strtok 函数原型:   char *strtok(char *s1, const char *s2) 函数功能:   分解s1字符串为用特定分隔符分隔的多个字符串(一般用于将英文句分解为单词) 函数返回:   字符串s1中首次出现s2中的字符前的子字符串指针 参数说明:   s

c语言-数组+字符串处理函数

一.构造类型 基本概念: (1)在C语言中,变量类型除了几种基本类型之外,还有另外一些复杂类型,合称为构造类型. (2)构造类型:是由基本类型构造而成的(如数组.结构体.共同体.枚举型). (3)构造类型的每一个分量是一个变量,它可以是一个简单类型或者构造类型. (4)构造类型的分量的使用方法与简单变量相同 (5)构造类型的分量占用相邻的存储空间. (6)对于构造类型的变量来说,重点是访问其分量的方法. 二.数组 数组概念:按序排列的具有相同类型的变量的集合 (1)用一符号名(数组名)来表示这一

《Java语言程序设计》大作业报告 九宫格游戏

    <Java语言程序设计>大作业报告     中国石油大学(北京)2015 - 2016 学年第二学期     班级:_____计算机14-1_______ 姓名:_____  许 恺_________________ 学号:______2014011329___________     题意分析 程序首先需要九个可以移动的格子,大小相等,有字符串标示,其次要可以相应鼠标和键盘方向键的控制,可以自由移动,并且与此同时记录步数,最后在满足条件时弹出对话框并显示步数以及是否打破记录,关于打破

Java语言程序设计 上机实验5 异常

Java语言程序设计 上机实验5 实验目的: 理解异常的概念,掌握Java的异常处理机制.常见异常的捕获方法.自定义异常及其抛出和捕获方法. 实验内容: 常见异常的捕获: 编写一个程序,分别生成ArrayIndexOutOfBoundsException类型和NumberFormatException类型的异常:然后改写程序,对这两种类型的异常进行捕获并合理地处理. 另外,思考并回答问题:能否0同时抛出ArrayIndexOutOfBoundsException类型和NumberFormatEx

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断