将字符串连接到另一个字符串的开头

时间:2016-05-07 06:42:33

标签: c string concatenation

是否有一个函数允许我将字符串连接到另一个字符串的开头?

例如,如果我有

str1 = "world!";
str2 = "Hello, ";

有没有办法将这些字符串组合成一个包含“Hello,world!”的字符串?

3 个答案:

答案 0 :(得分:2)

您可以使用静态声明的内存来执行此操作,而不是动态分配内存,并避免额外调用malloc并调用free。无论哪种方式都没关系。一个简单的例子是:

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

enum { MAXL = 64 }; /* constant for max concatenated length */

int main (void) {

    char str1[MAXL] = "hello";
    char str2[MAXL] = "world";
    char dest[2*MAXL+1] = "";

    strcpy (dest, str1);
    strcat (dest, " ");
    strcat (dest, str2);
    strcat (dest, "!");

    printf ("\n%s\n\n", dest);

    return 0;
}

使用示例

$ ./bin/concat

hello world!

任何一种方法都只是确保你的destination字符串中有足够的空间来保存连接的结果。将2个字符串组合在一起的最大字符数意味着只有1个分隔符,您可以使用两倍于现有字符串的可用存储空间(只需使用1 nul-terminatedating 字符即可获得一个字符串组合的字符串而不是之前的2)。如果您将其他字符添加为分隔符,则只需将这些字符添加到可用的总存储空间中。如果您有疑问,请告诉我。

答案 1 :(得分:1)

可以通过多种方式完成。这是一种使用动态内存分配的方法:

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

int main(void)
{ 
    char* str1 = "world!";
    char* str2 = "Hello, ";
    char* p = malloc(strlen(str1) + strlen(str2) + 1);  // Allocate memory for the new string
    strcpy(p, str2);  // Copy str2 to the new string
    strcat(p, str1);  // Concatenate str1
    printf("%s", p);  // print it
    free(p);          // free the allocated memory
    return 0;
}

请尝试以下代码:http://ideone.com/oydJHN

您可以使用以下内容代替动态内存分配:

#define LENGTH_OF_RESULT 100

char result[LENGTH_OF_RESULT];

而不是char* p;。您必须确保LENGTH_OF_RESULT足够大以容纳连接字符串。

动态内存分配的好处是您不必担心目标字符串的大小 - 只需根据输入字符串的长度分配您需要的内容,并为null终止添加1。

使用动态内存分配的缺点是,完成后必须记住free内存。

答案 2 :(得分:1)

你可以自己动手。很容易:

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

void my_strcat(char *dst, const char *src);


int main(void)
{
    char dst[50] = "world";
    char src[] = "hello ";
    my_strcat(dst, src);
    printf("%s\n", dst);
    return 0;
}

void my_strcat(char *dst, const char *src)
{
    size_t dst_len = strlen(dst) + 1, src_len = strlen(src);
    memmove(dst + src_len, dst, dst_len);
    memcpy(dst, src, src_len);
}