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

标签 c string pointers strcpy

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

相关文章:

C++ 和 Lua - 不 protected 错误(错误的回调)?这怎么可能

c++ - 无法将 unordered_map<char,char> 转换为 unordered_map<char, string>

c++ - 非常量引用类成员

c - 为什么 *(ptr++) 不给出数组中的下一项?

java - 我如何反转这个基本加密?

c++ - 在 C++ 中使用字符指针将字符串保存到类属性

将 malloc() 调用转换为 C 中的外部库调用

c - fatal error : netinet/in. h:没有这样的文件或目录

c - 多个 .c 文件的 makefile,同一目录

java字符串分割成数组,如何将char im分割成同一个数组?