Les fonctions de la bibliothèque standard C strtof
et strtod
avoir les signatures suivantes:Pourquoi le paramètre endptr strtof et strtod pointent-ils sur un pointeur char non-const?
float strtof(const char *str, char **endptr);
double strtod(const char *str, char **endptr);
Ils chaque décomposent la chaîne d'entrée, str
, en trois parties:
- Un initiale, éventuellement vide, la séquence de espace
- Une "séquence de sujet" de caractères qui représentent une valeur à virgule flottante
- Une "séquence de fin" de caractères qui sont unrec reconnu (et qui n'affectent pas la conversion).
Si endptr
n'est pas NULL
, alors *endptr
est réglé sur un pointeur sur le caractère suivant immédiatement le dernier caractère qui faisait partie de la conversion (en d'autres termes, le début de la séquence de fin).
Je me demande: pourquoi est-endptr
, puis, un pointeur vers un pointeur non const
char
? *endptr
n'est pas un pointeur dans une chaîne const
char
(la chaîne d'entrée str
)?
C'est fondamentalement le même problème que 'strchr' et amis, sauf qu'ici nous avons un pointeur out-param plutôt qu'une valeur de retour. –
@Steve: oui, mais c'est plus problématique que 'strchr' car vous ne pouvez pas passer l'adresse d'un pointeur qualifié' const' à ces fonctions sans un cast explicite. –
Question intéressante. Fondamentalement, cela signifie que vous pouvez cacher une distribution de 'char const *' à 'char *' derrière les fonctions 'strtoX'. Bizarre. –