Thread overview
[Beginner]Variable length arrays
Feb 25, 2017
helxi
Feb 25, 2017
rikki cattermole
Feb 25, 2017
helxi
February 25, 2017
I am trying to create an array which has a user defined size. However the following program is not compiling:

import std.stdio;

void main(){
    write("Enter your array size: ");
    int n;
    readf(" %s", &n);
    int[n] arr; //<-Error: variable input cannot be read at compile time
    writeln(arr);
}

1. What's causing this?
2. How can I get around this? I know I can always create a loop that appends value 'n' times.
February 26, 2017
On 26/02/2017 3:31 AM, helxi wrote:
> I am trying to create an array which has a user defined size. However
> the following program is not compiling:
>
> import std.stdio;
>
> void main(){
>     write("Enter your array size: ");
>     int n;
>     readf(" %s", &n);
>     int[n] arr; //<-Error: variable input cannot be read at compile time
>     writeln(arr);
> }
>
> 1. What's causing this?

T[X] is a static array, its size must be known at compile time.
Static arrays are passed around by value not by reference and generally get stored on the stack not the heap.

> 2. How can I get around this? I know I can always create a loop that
> appends value 'n' times.

This is where you want a dynamic array, allocated on the heap at runtime.

T[] array;
array.length = n;
February 25, 2017
On Saturday, 25 February 2017 at 14:34:31 UTC, rikki cattermole wrote:
> On 26/02/2017 3:31 AM, helxi wrote:
>> I am trying to create an array which has a user defined size. However
>> the following program is not compiling:
>>
>> import std.stdio;
>>
>> void main(){
>>     write("Enter your array size: ");
>>     int n;
>>     readf(" %s", &n);
>>     int[n] arr; //<-Error: variable input cannot be read at compile time
>>     writeln(arr);
>> }
>>
>> 1. What's causing this?
>
> T[X] is a static array, its size must be known at compile time.
> Static arrays are passed around by value not by reference and generally get stored on the stack not the heap.
>
>> 2. How can I get around this? I know I can always create a loop that
>> appends value 'n' times.
>
> This is where you want a dynamic array, allocated on the heap at runtime.
>
> T[] array;
> array.length = n;

Thanks