Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
762 views
in Technique[技术] by (71.8m points)

c - Initializing a dynamically-sized Variable-Length Array (VLA) to 0

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

char name[length] = {''};

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...