#include <stdio.h>
char *strcpy_(char *dst, char *src)
{
while((*src++ = *dst++)!= '\0')
return src;
}
main()
{
char src_str[] = "C programming language";
char dst_str[100];
printf("dst_str:%s\n", strcpy_(dst_str, src_str));
}
当我运行这个函数时,输出是“编程语言”C失踪,这里发生了什么,我还有一个问题,我不想使用数组传递函数的参数意味着我不想使用char src_str[] = "C programming language"
或char dst_str[100]
我想使用像char *src_str = "C programming language"
和char *dst_str
这样的指针,如果我使用,我会得到分段错误。
答案 0 :(得分:8)
除了向错误的方向复制外,您在while
循环结束时缺少分号:
char *strcpy_(char *dest, char *src) {
char *orig = dest;
while((*dest++ = *src++)!= '\0')
; // <<== Very important!!!
return orig;
}
如果没有分号(代表空语句),则在复制第一个字符后执行return
,这当然是不正确的。
最后,您可以跳过循环标题中的零检查,如下所示:
while(*dest++ = *src++)
;
答案 1 :(得分:1)
使用目标字符串覆盖源字符串。你可能反过来想要它:
(*dst++ = *src++)
答案 2 :(得分:0)
您正在将 dst 分配到 src ,而不是相反。
答案 3 :(得分:0)
您似乎正在将dest
复制到src
!请注意,如果您使用了更合适的函数原型,那么编译器就会遇到这个错误:
char * strcpy(char *dest, const char *src); // <<< note the `const` !!!
你的while循环也错过了;
。