2 votes

Comment convertir '\0' en const void*?

Je suis en train de migrer du code vers u18, et il semble que la signature de la fonction d'écriture posix ait changé

ssize_t write(int fd, const void *buf, size_t nbytes);

L'appel était write(output, '\0', 1);

Cependant, je recevais l'exception error: invalid conversion from 'char' to 'const void*' sur u18.

Quelle est la bonne façon d'initialiser un tableau de caractères nuls?

3voto

Lundin Points 21616

La manière correcte d'initialiser un tableau de caractères C (une chaîne de caractères) serait "", qui est une chaîne vide littérale ne contenant rien d'autre qu'un terminateur nul. La différence entre "" et '\0' est que le premier a un emplacement mémoire - c'est un tableau qui se dégrade en un pointeur et donc vous pouvez lui assigner directement un pointeur. Alors que '\0' est simplement une constante de caractère sans emplacement mémoire.

Cependant, dans le cas de Linux write, vous n'avez pas besoin de fournir une chaîne terminée par un caractère nul. Il fonctionne en vérifiant le paramètre de taille et ne recherche pas la fin de la chaîne comme une fonction de manipulation de chaîne.

Mais si vous voulez écrire un seul caractère - le terminateur nul - dans un fichier, alors la manière correcte serait :

write(output, "", 1);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X