Est-il possible qu’un littéral composé ait une longueur variable dans c99?

Je sais que les tableaux avec des longueurs déterminées au moment de l’exécution sont possibles en déclarant le tableau normalement:

char buf[len]; 

et je sais que je peux déclarer un tableau en tant que composé litral et l’assigner à un pointeur à mi-chemin:

 char *buf; .... buf = (char[5]) {0}; 

Cependant, la combinaison des deux ne fonctionne pas (ce n’est pas autorisé par la norme).

Ma question est la suivante: existe-t-il un moyen d’obtenir l’effet du code suivant? (note len )

 char *buf; .... buf = (char[len]) {0}; 

Je vous remercie.

    Le langage l’interdit explicitement

    6.5.2.5 Littéraux composés

    Contraintes

    1 Le nom du type doit spécifier un type d’object ou un tableau de taille inconnue, mais pas un type de tableau de longueur variable.

    Si vous avez besoin de quelque chose comme cela, vous devrez utiliser un object VLA nommé au lieu d’un littéral composé. Cependant, notez que les types VLA n’acceptent pas les initialiseurs, ce qui signifie que vous ne pouvez pas le faire.

     char buf[len] = { 0 }; // ERROR for non-constant `len` 

    (Je n’ai aucune idée de la raison de cette ressortingction.)

    Ainsi, en plus d’utiliser un object VLA nommé, vous devrez trouver un moyen de le mettre à zéro, comme un memset ou un cycle explicite.