C の文字列は、一見しただけでは、思ったほど柔軟ではないかもしれません。
「char outStr []」で行ったことは、配列構文で反復できるcharへのポインターが必要であることを示すことでした...必要な数について言及したことがないため、文字の実際のストレージは作成されません保管する。
C では、ポインターと呼ばれるこれらの特殊変数から記憶域を切り離すことができます。可変長文字列が必要な例は、実際にそれが必要な理由の良い例です。ストレージがどこにあるかの知識を保持するエンティティが必要です。ストレージ サイズを変更できるメソッドが必要です。
したがって、以下を含めて、動的メモリ割り当てを処理する準備をします。
#include <stdlib.h>
charsへのポインタを宣言する
char *cpString;
「n」文字の割り当てを要求します
cpString=malloc(n*sizeof(char));
これで、 strcat 、 printf、 n-1 文字を持つ文字列でやりたいことは何でもできます (null で終了する必要があるため)。具体的には、文字列を次のように初期化できるようになりました
memset(cpString,X,n-1);
cpString[n]=0;
n-1 文字の XXXX...XXX\0 文字列を作成します。
cpString のストレージ サイズを変更する場合、ここが難しい部分です。新しいストレージ割り当てを要求する前に、割り当てられたメモリを解放する必要があります。
if (cpString !=0)
{
free(cpString);
cpString=0;
}
cpString=malloc(n*sizeof(char));
そうしないと、動的メモリ ストレージ領域 (「ヒープ」と呼ばれる) に古い n サイズの再利用できない部分が残ります。
free() を必要としない、より優れたアロケーターがありますが、malloc() free() の使用法を勉強して練習するのはやめたほうがいいでしょう。