6

The following line of code, which creates a variable-length array on the stack:

char name[length] = {'\0'};

Generates the following compiler diagnostics:

error: variable-sized object may not be initialized
warning: excess elements in array initializer
warning: (near initialization for ‘name’)

What options are available to me for initializing VLAs? Am I forced to use a line such as:

memset(name, 0, sizeof(name));

Instead?

Evan Carroll
  • 78,363
  • 46
  • 261
  • 468
Matt Joiner
  • 112,946
  • 110
  • 377
  • 526

1 Answers1

5

Yes, you must write code for the initialisation of VLAs (which could be a memset() like you have described, or any other way that you care to).

It is simply a constraint in the C standard (§6.7.8):

  1. The type of the entity to be initialized shall be an array of unknown size or an object type that is not a variable length array type.
caf
  • 233,326
  • 40
  • 323
  • 462
  • Why can't I do it in the same line? – Matt Joiner Dec 10 '10 at 17:00
  • @Matt Joiner: It's just a constraint of the language - I've added the relevant text from the standard to my answer. – caf Dec 11 '10 at 01:16
  • 1
    I think it is to avoid edge cases like this: int arr[foo] = {1,2,3}; where foo could be 1 or 2. What happens then? :p And to make it simple {0} is disallowed too, but I'm not sure. – Maister Dec 11 '10 at 03:21
  • Can't argue with the standard. Not what I wanted to hear, but you can't expect bells & whistles from a 36 year old language. – Matt Joiner Dec 11 '10 at 06:36