C语言实现字符串拷贝函数的几种方法

Python07

C语言实现字符串拷贝函数的几种方法,第1张

首先是使用库函数

比如下面代码

void ourStrCopy(char S1[] , char S2[]){strcpy(S1, S2)//该函数还有另一个版本可以按长度截取 }

还有一个函数是memcpy,这个是内存拷贝,原型是

void memcpy(void *dest, const void *src, size_t n)需要注意的是这个函数第一个和第二个指针都是void型且第二个指针不能被修改,第三个参数是需要拷贝的内存长度按字节记。

然后是用指针引用,注意这个并非赋值,而是引用,这种操作需要注意内存。

char s1[] = "abcdefg"//定义一组字符串char *s2 = s1//按照指针拷贝字符串

第三种方法就是直接赋值了

void outStrCopy(char s1[] , char s2[]){int len1 = strlen(s1)//获取第一个字符串的长度int len2 = strlen(s2)//获取第二个字符串的长度int len = 0 //字符串总长度if(len1 <= len2){len = len2 //选择COPY的长度}else{len = len1 }for(int i = 0 i <len i++){s1[i] = s2[i] //实现数据拷贝}}

#include <stdio.h>int copy_str(char *src, char *dst){if(!src || !dst){return -1 }while(*src!='\0'){*dst++ = *src++ }*dst = '\0' return 0}int main(){char *s1 = "hello world" char s2[512] = {0} copy_str(s1, s2) printf("%s", s2) return 0}

C语言实现一个简单的文件复制功能,Linux环境下。

思路步骤:(下代码最重要的逻辑步骤清晰)

第一步:打开源文件(要复制的文件),打开文件的方式以读的方式就可以了。

Linux C打开文件的库函数有:int open(const char *pathname,int flags),int open(const char *pathname,mode_t mode),以及 FILE *fopen(const char *path,const char *mode),FILE *fdopen(int fd,const char *mode),这几个函数,具体的使用方法就查看manual就可以了。

第二步:创建目标文件,所用的函数也是上面那几个。

第三步:读取文件。库函数有:size_t read(int fd,void *buf,size_t count),

size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)

第三步:写入目标文件。用的库函数:size_t write(int fd,void *buf,size_t count),

size_t fwrite(void *ptr,size_t size,size_t nmemb,FILE *stream)

第四步:关闭文件。库函数:int fclose(FILE *fp) ,int close(int fd)

思路步骤就是这样子的了。下面是具体的代码实现。

#include

#include

#include

#include

#include

#include

int main(int argc,char *argv[])

{

int fd_source_file,fd_copy_file//用接受int open()函数返回的值

//FILE *fp_source_file,*fp_copy_file//如果用FILE *fopen()函数的话

int size_read,size_write

char buf[1024]

char copy_file_name[50]

//检查参数的输入

if(argc<3)

{

printf("usage: ./a.out source_file_path copy_file_path\n")

exit(1)

}

//复制目标文件名

strcpy(copy_file_name,argv[2])

//打开源文件

if( (fd_source_file=open(argv[1],O_RDONLY,00744))<0 )

{

perror("open source file error")

exit(1)

}

//创建目标文件

if( (fd_copy_file=open(argv[1],O_CREAT|O_RDWR)) <0 )

{

perror("create copy file error")

exit(1)

}

do

{

//读取文件内容

if( (size_read=read(fd_source_file,buf,1024)) <0 )

{

perror("read source file error")

exit(1)

}

//写入目标文件

if( (size_write=write(fd_copy_file,buf,sieze_read))<0 )

{

perror("wrire file error")

exit(1)

}

}while(size_read==1024)

return 0

}