C言語で文字列に1つの文字を追加するには?
i.e
char* str = "blablabla";
char c = 'H';
str_append(str,c); /* blablablaH */
C言語で文字列にcharを追加するには、まず、文字列を含むメモリバッファが追加の文字を収容できるだけの大きさがあることを確認する必要があります。例題のプログラムでは、与えられたリテラル文字列は変更できないので、新たに追加のメモリブロックを割り当てなければなりません。
以下にサンプルを示します。
#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 );
}
まず、malloc
を使って、入力文字列のすべての文字、追加する余分な文字、そして最後のゼロを格納するのに十分な大きさの新しいメモリチャンクを確保します。そして、strcpy
を呼んで、入力文字列を新しいバッファにコピーします。最後に、新しいバッファの最後の 2 バイトを変更して、追加する文字と最後のゼロを追加します。
cではこのような文字列の宣言はできないと思います。const charに対してのみ可能で、もちろんconst char を変更することはできません。
動的なchar配列を使うことはできますが、再割り当てに気をつけなければなりません。
EDIT: 実際、この構文は正しくコンパイルされます。それでも、strがあなたのやり方で初期化された場合、strが指すものを変更してはいけません(文字列リテラルから)。