c - 递归strcpy函数

标签 c string recursion strcpy

#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/

相关文章:

java - 计算二叉树的边总数

javascript - 有没有办法在 Javascript 中进行可变递归柯里化(Currying)?

java - 带 JNA 的非标准类型

c - 是否有 Windows 等同于 HANDLE 的 fdopen?

c - 链接非常简单的 MQTT 客户端(Azure IOT Hub SDK)时出现问题

javascript - 如何使用 replace() 方法更改 Javascript 中字符串的所有字符?

c - 使用递归读入一行并返回指向该字符串的指针

java - 使用递归反转字符串的偶数索引

c - libxml2 中奇怪的 XPath 行为

c# - ASP.Net 的 String.Replace 在 Windows 7 工作站上运行时与在 Windows 2008 R2 服务器上运行时的行为不同