字元串拷貝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中。