我最近尝试了这个实验,我没有为未知大小的内存需求进行动态内存分配,而是进行了静态分配。当我声明一个数组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++);
}
我的问题是:
- 这样的操作合法吗?
- 如果不是,为什么编译器不发出任何警告或错误?
- 该内存将分配到哪里:堆栈还是堆?
- 为什么 ANSI C/GCC 允许这样做?