j'ai un struct
où un élément est une chaîne d'une longueur maximale de N
. La définition:En C, comment faire en sorte que la longueur d'une chaîne initialisée est inférieure à celle spécifiée
typedef struct
{
const char foo[N];
} bar_t;
Je me attends les utilisateurs de ce struct pour initialiser le membre foo
d'une longueur de plus de N
:
bar_t mybar = { .foo = "12345678" };
où N=8
. Puisque je ne peux pas contrôler tous les initialisations de bar_t
, je veux compter sur le compilateur pour générer des avertissements/erreurs si bar_t.foo
a une longueur supérieure à N
.
Le problème est que pour tenir compte du caractère de terminaison (pour pouvoir utiliser bar_t.foo
comme une chaîne normale), il me faudrait préciser bar_t.foo
avec la longueur N+1
Sinon, je pourrais régler la longueur de bar_t.foo
à Je dois maintenant être explicite avec la longueur de chaîne attendue (c'est-à-dire avec strn*()
famille de fonctions avec N
comme argument longueur maximale) lors de l'utilisation de fonctions qui attendent un caractère de terminaison.
Y at-il un moyen d'obtenir compilateur d'être restrictive sur la durée des initialisations et aussi être en mesure de traiter le terrain sans être explicite sur la longueur de chaîne max?
Que diriez-vous d'une tactique inverse: toujours ajouter un caractère nul à la chaîne littérale : '.foo =" 12345678 \ 0 "'? – chux