根据这个:
strcpy vs strdup ,
strcpy 可以用循环实现,他们使用了这个 while(*ptr2++ = *ptr1++)
.我试图做类似的事情:
#include <stdio.h>
#include <stdlib.h>
int main(){
char *des = malloc(10);
for(char *src="abcdef\0";(*des++ = *src++););
printf("%s\n",des);
}
但这没有打印任何内容,也没有错误。什么地方出了错?非常感谢您的回答,我玩了一点,并决定如何最好地设计循环以查看复制是如何逐字节进行的。这似乎是最好的:
#include <stdio.h>
#include <stdlib.h>
int main(){
char *des = malloc(7);
for(char *src="abcdef", *p=des; (*p++=*src++); printf("%s\n",des));
}
最佳答案
在这个循环中
for(char *src="abcdef\0";(*des++ = *src++););
目标指针des
正在改变。所以在循环之后它不会指向复制字符串的开头。注意显式终止零字符
'\0'
在字符串文字中是多余的。循环可以如下所示
for ( char *src = "abcdef", *p = des; (*p++ = *src++););
然后在循环之后puts( des );
和free( des );
您可以编写一个类似于 strcpy
的单独函数。以下方式char * my_strcpy( char *des, const char *src )
{
for ( char *p = des; ( *p++ = *src++ ); );
return des;
}
并称之为puts( my_strcpy( des, "abcdef" ) )'
free( des );
关于c - 如何在c中正确实现strcpy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62498695/