我需要在C中编写一个probram,它会在字符串等中添加一个字符串(例如' 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;
}
答案 0 :(得分:1)
您正在尝试写入"vb"
的末尾,这是常量池中的字符串。不要那样做。分配一个strlen(s) * n + 1
长的字符串并写入该字符串。
您的基本情况可能是错误的。基本情况可能应该是n == 0
时,空字符串(除了终止NUL之外没有附加任何内容)是合适的。
您的递归步骤(n++)
可能应该(n - 1)
倒数到该基本情况。如上所述,后增量执行无用的赋值和递归,具有相同的n
值。
我不知道counter
和len
应该做什么,但它们看起来多余。 len
未初始化,因此s[len]
具有未定义的行为。
在编写n
份副本后,您需要在末尾添加终止NUL('\0'
),以便printf
和类似功能可以识别结尾。
答案 1 :(得分:0)
您正在使用s作为全局变量和局部变量,该函数正在本地工作。 尽量不要在没有必要的地方使用全局变量。此外,不需要递归。
#include <stdio.h>
void concatenate_string(char *dest, const char *src, int n) {
char *s;
while(n--) {
s = (char*)src;
while(*(s))
*(dest++)=*(s++);
}
*(dest++) = 0;
}
int main(void) {
char out[80];
concatenate_string(out, "ab", 5);
printf("%s", out);
return 0;
}