如何实现不用strcpy函数复制字符串呀

时间:2022-09-14 20:38:55
不用strcpy函数如何实现字符串的复制,大家可以帮助我提供一些程序思想和技术指导。
谢谢

15 个解决方案

#1


自已手工拷贝呗,相当于自己实现了strcpy。

#2


while(*dest++ = *src++);

#3


sprintf 或 memcpy ,呵呵

#4


memcpy

#5


明白大家的指点,但是具体应该怎么样来写,还是有些不明白

#6


for(int i=0;i<length;i++)
    str1[i] = str2[i];

#7


还没听明白啊,楼主是不是还没搞清楚C语言中的字符串是啥啊。:)
方法有很多,比如,对于:
char* s1 = "Hello World";
char* s2[16];

不用strcpy,也有另外好多方法可以实现把s1的内容拷贝到s2中,比如:
(1)
int len = strlen(s1);
for(int i = 0; i < len; ++i) {
s2[i] = s1[i];
}

(2)
int len = strlen(s1);
memcpy(s1, s2, len + 1);

(3)
sprintf(s2, "%s", s1);

(4)
char* p = s2;
char* q = s1;
while(*p++ = *q++)
;

(5)
s2[0] = '\0';
strcat(s2, s1);

#8


char *strcpy(char *strDest, const char *strSrc);
{
    assert((strDest!=NULL) && (strSrc !=NULL));
    char *address = strDest;
    while( (*strDest++ = * strSrc++) != ‘\0’ )
       NULL ; 
    return address ;
}

#9


弱弱的问下:
(5)
s2[0] = '\0';
strcat(s2, s1);

这个也行么??s2[0]空间是不是不够???

#10


for(int i=0;i<length;i++)
    str1[i] = str2[i];
  不用strlen()怎样知道长度啊?是不是
for(int i=0;str2[i]!='0';i++)??

#11


To:bargio_susie() 
我那个s2是指前面定义的char s2[16],这里只是赋第一个字节。

To:shencyx(终有一天变成牛人..)
差不多,但int最好定义在for之外。

#12


cpystr(char *pss,char *pds){
while(*pds++=*pss++);
}
main(){
char *pa="CHINA",b[10],*pb;
pb=b;
cpystr(pa,pb);
printf("string a=%s\nstring b=%s\n",pa,pb);
}

#13


to steedhorse(晨星) 
for(int i=0;str2[i]!='0';i++)??
写错了.应该改成
for(int i=0;str2[i]!=0;i++) 或for(int i=0;str2[i]!='\0';i++)??
这才对??

#14


在for里定义的i外面访问不了。除非你用VC6。- -b

int i;
for(i = 0; str1[i] != '\0'; ++i)
;//注意这个空语句。
这时,i就等于字符串的长度。

也可以用指针运算。
const char* p = str1;
while(*p++)
;
int len = p - str1 - 1;

#15


看到这个题目就立刻想到了while(*des ++ = *src ++)这个经典的式子,
Brian W.kernighan和Dennis M.Ritchie在C程序设计语言中提到过,
呵呵,简直是条件反射!

#1


自已手工拷贝呗,相当于自己实现了strcpy。

#2


while(*dest++ = *src++);

#3


sprintf 或 memcpy ,呵呵

#4


memcpy

#5


明白大家的指点,但是具体应该怎么样来写,还是有些不明白

#6


for(int i=0;i<length;i++)
    str1[i] = str2[i];

#7


还没听明白啊,楼主是不是还没搞清楚C语言中的字符串是啥啊。:)
方法有很多,比如,对于:
char* s1 = "Hello World";
char* s2[16];

不用strcpy,也有另外好多方法可以实现把s1的内容拷贝到s2中,比如:
(1)
int len = strlen(s1);
for(int i = 0; i < len; ++i) {
s2[i] = s1[i];
}

(2)
int len = strlen(s1);
memcpy(s1, s2, len + 1);

(3)
sprintf(s2, "%s", s1);

(4)
char* p = s2;
char* q = s1;
while(*p++ = *q++)
;

(5)
s2[0] = '\0';
strcat(s2, s1);

#8


char *strcpy(char *strDest, const char *strSrc);
{
    assert((strDest!=NULL) && (strSrc !=NULL));
    char *address = strDest;
    while( (*strDest++ = * strSrc++) != ‘\0’ )
       NULL ; 
    return address ;
}

#9


弱弱的问下:
(5)
s2[0] = '\0';
strcat(s2, s1);

这个也行么??s2[0]空间是不是不够???

#10


for(int i=0;i<length;i++)
    str1[i] = str2[i];
  不用strlen()怎样知道长度啊?是不是
for(int i=0;str2[i]!='0';i++)??

#11


To:bargio_susie() 
我那个s2是指前面定义的char s2[16],这里只是赋第一个字节。

To:shencyx(终有一天变成牛人..)
差不多,但int最好定义在for之外。

#12


cpystr(char *pss,char *pds){
while(*pds++=*pss++);
}
main(){
char *pa="CHINA",b[10],*pb;
pb=b;
cpystr(pa,pb);
printf("string a=%s\nstring b=%s\n",pa,pb);
}

#13


to steedhorse(晨星) 
for(int i=0;str2[i]!='0';i++)??
写错了.应该改成
for(int i=0;str2[i]!=0;i++) 或for(int i=0;str2[i]!='\0';i++)??
这才对??

#14


在for里定义的i外面访问不了。除非你用VC6。- -b

int i;
for(i = 0; str1[i] != '\0'; ++i)
;//注意这个空语句。
这时,i就等于字符串的长度。

也可以用指针运算。
const char* p = str1;
while(*p++)
;
int len = p - str1 - 1;

#15


看到这个题目就立刻想到了while(*des ++ = *src ++)这个经典的式子,
Brian W.kernighan和Dennis M.Ritchie在C程序设计语言中提到过,
呵呵,简直是条件反射!