如何在C中连接字符串?

时间:2014-12-30 18:46:46

标签: c string string-concatenation

如何以这种方式连接字符串?

例如:

char *txt = "Hello";
txt=txt+"World!";

我试过了,但事实并非如此。

4 个答案:

答案 0 :(得分:5)

txt是一个指针,应该为它分配内存。

最好进行以下检查

  1. 需要分配的内存量可以通过

    计算

    size_t size = strlen("Hello") + strlen("World");

  2. char *txt = malloc(size + 1);

  3. 在访问malloc()之前检查它的返回值。

    if(txt != NULL)

  4. 动态地可以这样做:

     char *txt = malloc(size+1); /* Number of bytes needed to store your strings */
     strcpy(txt,"Hello");
     strcat(txt,"World");
    

    分配的内存应在使用后释放,如

    free(txt);
    

    或者你也可以

    char txt[30];
    strcpy(txt,"Hello");
    strcat(txt,"World");
    

答案 1 :(得分:2)

这是连接字符串的经典方法:

char *txt = "Hello";
char *txt2 = "World!";

char *txt3 = malloc(strlen(txt) + strlen(txt2) + 1); // don't forget about ending \0
strcpy(txt3,"Hello");
strcat(txt3,"World");
不要忘记释放分配的内存

答案 2 :(得分:1)

使用malloc避免内存泄漏 - 使用数组

char txt[100];
strcpy(txt, "hello");
strcat(txt, "world");

所有C课本都涵盖了这一点

答案 3 :(得分:1)

要正确地执行此操作,您可以使用许多选项来声明char数组并使用@EdHeal建议的数组,但您应事先知道两个字符串组合的长度,或者您可以溢出数组,并且是undefined behavior

或者,您使用动态内存分配,但这比调用mallocstrcpy更复杂,因为您需要非常小心。

首先,您必须知道在c字符串中需要在字符串末尾添加'\0'字符,因此在分配内存时应该考虑它。

字符串的长度是通过strlen函数获得的,你应该尝试每个字符串只使用一次,因为它计算长度,因此它很昂贵而且多次使用它是多余的相同的字符串。

使用malloc时,系统内存可能会耗尽,在这种情况下,malloc将返回特殊值NULL,如果有,则返回pointer的任何操作将是undefined behavior

最后,当您不再需要构造的字符串时,您必须将资源释放到操作系统usgin free

这是我的意思的一个例子

char  *text;
size_t lengthOfHello;
size_t lengthOfWorld;

lengthOfHello = strlen("Hello");
lengthOfWorld = strlen("World");

text = malloc(1 + lengthOfHello + lengthOfWorld);
if (text != NULL)
{
    strcpy(text, "Hello");
    strcat(text, "world");
    /* ... do stuff with text ... */
    free(text);
}

终止'\0'已在"Hello"中,并将由strcpy复制。