J'utilise le code ci-dessousstrncpy et en utilisant sizeof pour copier caractères maximum
char call[64] = {'\0'} /* clean buffer */
strncpy(call, info.called, sizeof(call));
J'utilise toujours le sizeof pour la destination pour la protection d'un débordement, Incase source est supérieure à la destination. De cette façon, je peux empêcher un débordement de buffer car il ne copiera que ce que la destination peut gérer.
Mais je me demande maintenant si elle va annuler la destination.
Quelques cas.
1) Si la source est supérieure. je pouvais faire ceci:
call[strlen(call) - 1] = '\0'; /* insert a null at the last element.*/
2) Si la source est inférieure à la destination. appel est de 64 octets, et je copie 50 octets comme c'est la taille de la source. Va-t-il automatiquement mettre le null dans l'élément 51?
Un grand merci pour toute information,
Une façon simple d'assurer que la destination est nulle est terminée ici est de faire appel [sizeof call -1] = 0; – nos
Je ne pensais pas que strncpy mettrait fin à la chaîne. En ne terminant pas la chaîne. Cela pourrait-il conduire à un vrai problème? Aussi en faisant cet appel [strlen (info.called - 1] = '\ 0'; Quelle est la bonne façon de terminer si la source est supérieure ou inférieure à la destination? Merci – ant2009
Oui, une chaîne non terminée provoquera ' strlen() ',' strcat() ', etc., avoir une erreur, une corruption de mémoire et/ou un plantage Le paramétrage du dernier octet du tampon à zéro ne nuit à rien quand la chaîne est plus courte que la destination, –