在数组上使用malloc

Rav*_*avi 5 c arrays malloc dynamic-memory-allocation

可能是在SO上发现的类似问题.但是,我没有发现,这是场景

情况1

void main()
{
    char g[10];
    char a[10];
    scanf("%[^\n] %[^\n]",a,g);
    swap(a,g);
    printf("%s %s",a,g);
}
Run Code Online (Sandbox Code Playgroud)

案例2

void main()
{
    char *g=malloc(sizeof(char)*10);
    char *a=malloc(sizeof(char)*10);
    scanf("%[^\n] %[^\n]",a,g);
    swap(a,g);
    printf("%s %s",a,g);
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我得到相同的输出.所以,我的问题是我应该何时更喜欢malloc()而不是array反复,为什么?我找到了通用的定义,malloc()提供了动态分配.那么,这是他们之间的唯一区别?请任何一个用例子解释,dynamic虽然我们在中指定大小,但是含义是什么malloc().

Dav*_*nan 6

主要区别在于您何时以及如何确定阵列长度.使用固定长度数组会强制您在编译时决定数组长度.相比之下,using malloc允许您在运行时决定数组长度.

特别是,在运行时决定允许您根据用户输入决定基于编译时未知的信息.例如,您可以将数组分配为足够大的大小以适合用户输入的实际数据.如果使用固定长度数组,则必须在编译时决定上限,然后将该限制强制用户.

另一个更微妙的问题是,将非常大的固定长度数组分配为局部变量会导致堆栈溢出运行时错误.因此,您有时更喜欢使用动态分配此类数组malloc.