私は最近、この実験を試しました。この実験では、サイズが不明なメモリ要件に対して動的メモリ割り当てを行う代わりに、静的割り当てを行いました。私が配列a[i]
を宣言したとき、私はi
(配列のサイズ)変数を保持し、ユーザーの入力に依存していました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
void function(int );
int main(void)
{
int i;
printf("Enter:");
scanf("%d",&i);
function(i);
printf("i = %d\n",i);
getch();
return 0;
}
void function(int i)
{
char a[i];
char b[4];
strncpy(a,"hello",i);
strcpy(b,"world");
int j = 0;
char *c = a;
for( j = 0; j< 20; j++ )
printf("%c",*c++);
}
私の質問は次のとおりです。
- そのような操作は合法ですか?
- いいえの場合、コンパイラが警告やエラーを発行しないのはなぜですか?
- このメモリはどこに割り当てられますか:スタックまたはヒープ?
- なぜANSIC/ GCCがこれを許可するのですか?