如何将单个字符附加到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";
原贴的本意并不是要写:
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)
如果 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()