在C中追加字符串到字符串?

App*_*ker 44 c string

如何将单个字符附加到C中的字符串?

char* str = "blablabla";
char c = 'H';
str_append(str,c); /* blablablaH */
Run Code Online (Sandbox Code Playgroud)

Fre*_*abe 35

要将字符串附加到C中的字符串,首先必须确保包含字符串的内存缓冲区足够大以容纳额外的字符.在您的示例程序中,您必须分配一个新的附加内存块,因为无法修改给定的文字字符串.

这是一个示例:

#include <stdlib.h>

int main()
{
    char *str = "blablabla";
    char c = 'H';

    size_t len = strlen(str);
    char *str2 = malloc(len + 1 + 1 ); /* one for extra char, one for trailing zero */
    strcpy(str2, str);
    str2[len] = c;
    str2[len + 1] = '\0';

    printf( "%s\n", str2 ); /* prints "blablablaH" */

    free( str2 );
}
Run Code Online (Sandbox Code Playgroud)

首先,malloc用来分配一大块内存,它足够大以容纳输入字符串的所有字符,附加的额外字符 - 以及最后的零.然后调用strcpy将输入字符串复制到新缓冲区中.最后,更改新缓冲区中的最后两个字节以添加要添加的字符以及尾随零.


Alo*_*ave 33

char* str = "blablabla";     
Run Code Online (Sandbox Code Playgroud)

你根本不应该修改这个字符串.它驻留在实现定义的只读区域中.修改它会导致未定义的行为.

你需要一个char数组而不是字符串文字.

好读:
char a [] ="string"有什么区别; 和char*p ="string";


rew*_*rew 7

原贴的本意并不是要写:

  char* str = "blablabla";
Run Code Online (Sandbox Code Playgroud)

  char str[128] = "blablabla";
Run Code Online (Sandbox Code Playgroud)

现在,添加单个字符似乎比使用 strcat 添加整个字符串更有效。采用 strcat 方式,您可以:

  char tmpstr[2];
  tmpstr[0] = c;
  tmpstr[1] = 0;
  strcat (str, tmpstr);
Run Code Online (Sandbox Code Playgroud)

但您也可以轻松编写自己的函数(正如我之前的几个人所做的那样):

  void strcat_c (char *str, char c)
  {
    for (;*str;str++); // note the terminating semicolon here. 
    *str++ = c; 
    *str++ = 0;
  }
Run Code Online (Sandbox Code Playgroud)


Lay*_*lez 5

如果 Linux 是您的问题,最简单的方法是附加两个字符串:

char * append(char * string1, char * string2)
{
    char * result = NULL;
    asprintf(&result, "%s%s", string1, string2);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这不适用于 MS Visual C。

注意:你必须free()返回的内存asprintf()

  • 如果你有非标准的 `asprintf` 函数;它不是由 C 语言或 POSIX 定义的。 (4认同)
  • @Abhishek asprintf mallocs 足够的空间将结果字符串放入其中。显然,它在 GNU glibc 和大多数 BSD 版本中可用(将 OS X 视为 BSD 的一个版本)。 (4认同)