字符串拷贝c语言
A. c语言实现字符串拷贝函数的几种方法
首先是使用库函数
比如下面代码
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]; //实现数据拷贝 }}
B. c语言编程:字符串拷贝(程序改错)
不知道你这是做的题目还是练习什么的?这题有很大的问题。
1字符串数组大小的问题,然后因为这个导致后面函数strcpy和后面的字写函数都有问题。哪怕代码改的可以正常运行,以后肯定还是会有指针溢出
#include <stdio.h>
#include <string.h>
#define BUF_SIZE 10
#define setString for (i=0;i<BUF_SIZE;i++) string1[i]=i
#define showString printf("[%s]\n",string1)
void strCpy1(char* t,const char *f);
void strCpy2(char* t,const char *f);
void strCpy3(char* t,const char *f);
int main() {
int i;
char string[BUF_SIZE]="123456789";
char string1[BUF_SIZE];
setString;
strcpy(string1,string);
showString;
setString;
strncpy(string1,string,strlen(string)+1);//change (1)
showString;
setString;
strCpy1(string1,string);
showString;
setString;
strCpy2(string1,string);
showString;
setString;
strCpy3(string1,string);
showString;
return 0;
}
void strCpy1(char* t,const char *f) {
for (unsigned i=0;i<strlen(f)+1;i++)//change (2)
t[i]=f[i];
}
void strCpy2(char* t,const char *f) {
while ((*t++=*f++)!='\0');//change3
}
void strCpy3(char* t,const char *f) {
while ((*t++=*f++)!='\0'); //change 4
}
C. c语言把一个字符串复制到另一个字符串
用char指针复制字符串用while循环:
#include<stdio.h>
int main()
{ char s[300],s1[300],*p=s,*q=s1;
gets(s);
while(*q++=*p++);
puts(s1);
return 0;
}
=================
用库函数:
#include<stdio.h>
#include<string.h>
int main()
{ char s[300],s1[300];
gets(s);
strcpy(s1,s);
puts(s1);
return 0;
}
D. C语言字符串拷贝
数组名是个地址常量,常量是不能修改的,所以++操作不能应用在数组名上
而函数参数里的数组只是一个指针而已,也就是说你调用mystrcpy时,函数会产生两个指针分别指向str1和str2的首地址,这两个指针就可以用++操作了
E. C语言,使用函数实现字符串复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <time.h>
/*把从src地址开始的字符串复制到以dest开始的字符串中*/
char* str (char* dest, char *src) {
char* r = dest;
while((*r++ = *src++)!='\0');
return dest;
}
int main () {
char *str1="abcde";
char *str2;
str2 = str (str2, str1); /*把str1复制到str2*/
puts (str2);
return 0;
}
F. C语言问题:将字符串a复制到字符串b中
将字符串a复制到字符串b中,简单的方法是使用strcpy函数;
头文件:#include
定义函数:char
*strcpy(char
*dest,
const
char
*src);
函数说明:strcpy()会将参数src
字符串拷贝至参数dest
所指的地址。
返回值:返回参数dest
的字符串起始地址。
附加说明:如果参数
dest
所指的内存空间不够大,可能会造成缓冲溢出(buffer
Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。
范例
#include
#include
void
main()
{
char
a[30]
=
"first
string(1)";
char
b[]
=
"another
string(2)";
printf("before
strcpy()
:%s\n",
a);
printf("after
strcpy()
:%s\n",
strcpy(a,
b));
}
也可以使用循环来复制:
#include
void
main()
{
int
i;
char
a[30]
=
"first
string(1)";
char
b[]
=
"another
string(2)";
printf("before
:
%s\n",
a);
for(i=0;b[i];i++)a[i]=b[i];
//复制除'\0'以外的每一个字符
a[i]='\0';
//置串尾标记'\0'
printf("after
:
%s\n",
a);
}
G. C语言中字符串的复制
要先加入
头文件
#include
里面的有个函数可以直接复制字符串
例如:
strcpy(str2,str1)
;
把str1中的字符复制到str2中。