この C コード行の問題点
char *string()
{
char *text[20];
strcpy(text,"Hello world");
return text;
}
私はポインターが苦手で、これは以前の論文で見たことがあります。解決できません。
文字ポインターの配列を単一の文字配列として扱うため、コンパイルされません。
変数宣言行は次のようになります。
char text[200];
その修正が完了しても、おそらく興味がある理由でまだ壊れています。関数が返すときにスコープ外にtext
なるローカル変数 (文字配列)のアドレスを返すため、アドレスが無効になります。これには 2 つの方法があります。
static
することです。これにより、プログラムが実行されている限り有効になります。malloc()
が、所有権が呼び出し元に転送され、呼び出しが必要にfree()
なるか、この関数が頻繁に呼び出されるとメモリ リークが発生します。また、マイナーな点として、その名前は予約済みの名前空間にあります (ユーザー プログラムは、名前が で始まる関数を定義できませんstr
)。また、引数を取らない関数(void)
は C のように宣言する必要があります。空の括弧のペアは同じことを意味しません。