почему c позволяет инициализацию строки без объявления?

Когда аргументы dyn_mat являются константами, код выполняется без ошибок, а s1 и s2 сохраняют входные значения.

#include

int main(int argc, char const *argv[])
{
    char *s1, *s2;
    int n1=7, n2=8;
    printf("Enter, %d \n", n1);

    scanf("%s", s1);
    scanf("%s", s2);

    int dyn_mat[155][347];

    return 0;
}

но с аргументами в качестве переменных, скажем, n1 и n2, чтение Scanf s1 дает ошибку сегментации.

Ответы на вопрос(2)

Ваш ответ на вопрос