#include <stdio.h>
char *strcpy_r(char* s, char* t);
int main()
{
char *s = {"Bob"};
char *t = {"Billy"};
char *ptr;
ptr = strcpy_r(s, t);
printf("%s\n", ptr);
return 0;
}
char* strcpy_r(char* s, char* t)
{
if((*s = *t) != '\0')
strcpy_r(s + 1, t + 1);
return s;
}
我这样做只是为了练习,但是当我编译它时。我从 main 中得到了一个段错误。有人能告诉我是什么原因导致了这个段错误吗?
最佳答案
恭喜,您已在一行内调用了两次未定义行为。
首先,您无法修改字符串文字的内容。因此 strcpy()
调用 "foo"
是错误的。
两个,即使你可以:你正在将一个字符串复制到比该字符串短的缓冲区中。这又是UB。
关于c - 递归strcpy函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517200/