C - 连接字符串的所有头部

3 c string pointers

好的,最近的一个测验条目要求学生编写一个方法'longhead'(char*longhead),该方法将返回一个字符串,该字符串由给定字符串中所有头的串联组成.例:

char *string = "this";
printf("%s\n", longhead(string));
Run Code Online (Sandbox Code Playgroud)

输出:tththithis

我确实提出了一个解决方案,但它只适用于数组,它在main方法中.我一直试图在指针上找到一个好的立足点,我觉得通过重复这些测验问题我肯定会到达正确的地方.

这个问题有方法解决吗?或者......这可以用'strlen'来完成吗?

更新:

这是我编写的解决方案,它仅适用于char数组,并且位于main方法中:

char *toPrint = "roses";
int i, j = strlen(toPrint); 
char toPrintArray[j];
for(i = 0; *toPrint != 0; toPrint++, i++){
    toPrintArray[i] = *toPrint;
}
int k;
for(i = 0; i < j; i++){
    for(k = 0; k < i; k++)
        printf("%c", toPrintArray[k]);
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 5

所需字符串的长度(当输入长度为N时)是(N * (N+1)) / 2(整数1到N的总和,有时称为"高斯公式").所以...:

char* longhead(const char* s)
{
    int len = strlen(s);
    char * result = malloc(1 + (len * (len+1))/2);
    char * p = result;
    int i;

    for(i=1; i<=len; ++i) {
      memcpy(p, s, i);
      p += i;
    }
    *p = 0;

    return result;
}
Run Code Online (Sandbox Code Playgroud)

当然调用者必须对结果负责(free它完成后):你给出的示例调用代码会不可避免地导致内存泄漏.