Я недавно пробовал этот эксперимент, в котором вместо перехода на динамическое выделение памяти для требований к памяти неизвестного размера я сделал статическое распределение. Когда массив 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 разрешает это?
Какие варианты не так использовать, чтобы скомпилировать это? Что вы видели, когда вы это использовали? Вы должны попытаться распечатать строку, на которую указывает указатель c. –