L'allocation de char tableau à l'aide de malloc
Hi récemment, j'ai vu beaucoup de code en ligne(également sur;) comme:
char *p = malloc( sizeof(char) * ( len + 1 ) );
Pourquoi sizeof(char) ? Il n'est pas nécessaire, n'est-ce pas? Ou Est-ce simplement une question de style?
Quels avantages a-t-elle?
Double de stackoverflow.com/questions/1011806/... si je suis en désaccord avec la accepté de répondre (je préfère omettre sizeof(char))
OriginalL'auteur Nyan | 2010-06-25
Vous devez vous connecter pour publier un commentaire.
Oui, c'est une question de style, parce que vous attendez
sizeof(char)
toujours.D'autre part, il est très bien un idiome à utiliser
sizeof(foo)
lors d'unemalloc
, et plus important encore, il rend le code auto-documentation.Également de mieux pour l'entretien, peut-être. Si tu passais de
char
àwchar
, vous feriez passer àsans trop y penser. Alors que la conversion de la déclaration
char *p = malloc( len + 1 );
aurait besoin de plus de pensée. Il est tout au sujet de la réduction de surcharge mentale.Et comme @Nyan suggère dans un commentaire, vous pouvez aussi faire
pour zéro des chaînes terminées et
pour le commun des tampons.
Oh je voulais dire sizeof(*p)
Bien sûr, cela fonctionne également. Je n'ai jamais vu cela avant, mais si j'étais encore un travail de programmeur en C, je voudrais envisager l'adoption de votre suggestion comme idiome .. bien que le
len +1
partie ne serait que pour une chaîne comme des objets.Non seulement, vous vous attendez à être 1 elle est définie à l'être. L'un des très peu d'éléments dont la taille est définie explicitement.
OriginalL'auteur brainjam
Il sert à l'auto-document de l'opération. Le langage définit un char d'être exactement un octet. Il ne précise pas combien de bits sont dans cet octet que certaines machines ont 8, 12, 16, 19 ou 30 bits minimum adressable unités (ou plus). Mais un char est toujours un octet.
OriginalL'auteur Amardeep AC9MF
La spécification dicte que les caractères sont de 1 octet, il est strictement facultatif. Personnellement, j'ai toujours inclure les
sizeof
pour des raisons de cohérence, mais il n'a pas d'importanceOriginalL'auteur Michael Mrozek