c - 用C中的递归函数添加字符串

标签 c string recursion concatenation

我需要用 C 语言编写一个问题,它将一个字符串添加到一个字符串等(例如“5”字符串 - 它需要读取“vbvbvbvbvb”5 次。)但是它不起作用?请帮忙!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char s[80];
int len;
int counter = 0;

char* repeat(char* s, int n) {

    if (n > 0) {
        if (s[len] == n) {
            counter++;
        }
        len--;
        repeat(s, (n++));
    }
    return s;
}

int main(void) {
    printf("%s", repeat("vb", 5));
    fflush(stdout);
    return EXIT_SUCCESS;
}

最佳答案

您正在尝试写入“vb”的末尾,它是常量池中的字符串。不要那样做。分配一个 strlen(s) * n + 1 长的字符串并将其写入其中。

您的基本情况可能是错误的。基本情况可能应该是当 n == 0 时,即空字符串(除了终止 NUL 之外没有附加任何内容,如下所示)是合适的。

您的递归步骤(n++)可能应该是(n - 1)以倒计时到该基本情况。正如所写,后增量执行无用的分配并使用相同的 n 值进行递归。

我不知道 counterlen 应该做什么,但它们对我来说看起来多余。 len 未初始化,因此 s[len] 具有未定义的行为。

写入n个副本后,您需要在末尾添加终止NUL('\0'),以便printf和类似的函数可以识别结束。

关于c - 用C中的递归函数添加字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087653/

相关文章:

MySQL:如何选择表的某些行并执行 SUBSTRING_INDEX

c - 错误消息 "format ‘%ld’ 需要类型为 ‘long int’ 的参数,但参数 2 的类型为 ‘int’“

php - 如何递归获取多维数组中所有父元素的ID?

scala - 为什么我不能在代码块中递归地定义变量?

c - 我应该对线程之间的共享结构使用访问控制吗?

c++ - 分配函数和返回指针

objective-c - 在一个库中声明变量或函数并在另一个库中定义它

javascript - 使用变量名称和字符串组合创建 Javascript 变量

regex - 如果给定的字符串包含给定的子字符串,那么惯用的 scala 查找方式是什么?

c - 如何注册回调以在 linux 中执行文件更改?