次のコードを書いているときにエラーが発生するはずです。配列サイズはゼロ(私は違法だと思います)として与えられ、さらにsprintfはメモリが割り当てられていないaに「abc」を出力していますが、出力は「abc」として取得しています。理由がわかりませんか?
#include<stdio.h>
#include<string.h>
int main()
{
char a[0];
sprintf(a,"%s","abc");
printf("%s\n",a);
return 0;
}
配列サイズを1,2,3にすると、正しい出力が得られます。これは、aをポインターとして明示的に使用する、つまりchar * a(予期される)を使用するためのセグメンテーション違反を与える場合には当てはまりません。 )。誰かが内部の働きを説明できますか?