#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));
}
Run Code Online (Sandbox Code Playgroud)
什么时候我运行这个函数输出这是"编程语言"C失踪,这里发生了什么,我还有一个问题,我不想使用数组传递函数的参数意味着我不要使用char src_str[] = "C programming language"或char dst_str[100]取而代之的是我想使用像一个指针char *src_str = "C programming language"和char *dst_str,如果我用,所以我得到一个分割错误.
除了向错误的方向复制外,在while循环结束时缺少分号:
char *strcpy_(char *dest, char *src) {
char *orig = dest;
while((*dest++ = *src++)!= '\0')
; // <<== Very important!!!
return orig;
}
Run Code Online (Sandbox Code Playgroud)
如果没有分号(表示空语句),则return在复制第一个字符后执行,这当然是不正确的.
最后,您可以跳过循环标题中的零检查,如下所示:
while(*dest++ = *src++)
;
Run Code Online (Sandbox Code Playgroud)