问题
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?
回答1:
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):
- 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.
来源:https://stackoverflow.com/questions/4393779/initializing-a-dynamically-sized-variable-length-array-vla-to-0