私は次のことをしました:
char * copyact(char * from)
{
return ++from;
}
int main()
{
char *string = "school";
char *copy;
copy = copyact(string);
printf("%s", copy);
}
これは印刷chool
していますが、main() で印刷しようとすると、アプリケーションがクラッシュする必要があるというのが私の考えです。スコープ ルールにより、パラメーター from は copyact 関数に対してローカルな変数です。私は from = from + 1; をやっています。その場所への住所を返します。main に戻ると、すべてのローカル変数を破棄する必要があるため、その場所に与えられたメモリは無効になるのではないでしょうか? なぜこれがまだ機能しているのですか?
明確化:文字列のアドレスを格納するポインタ &from にメモリ位置を割り当てませんか? 関数が終了するときに、有効なアドレスを保持しているポインタのアドレスも破棄しませんか? それとも、 return が実行されるまでに、それが指すアドレスが既に copy= に送信されているためですか?