gpt4 book ai didi

c - 如何在c中正确实现strcpy?

转载 作者:行者123 更新时间:2023-12-03 23:20:35 24 4
gpt4 key购买 nike

根据这个:
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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com