Le funzioni di libreria standard del C strtof
e strtod
avere i seguenti identificativi:Perché il parametro endptr è in grado di strtof e strtod un puntatore a un puntatore char non const?
float strtof(const char *str, char **endptr);
double strtod(const char *str, char **endptr);
Ognuno decompongono la stringa di input, str
, in tre parti:
- Un primo, possibilmente vuoto, sequenza di spazio vuoto
- Una "sequenza soggetto" di caratteri che rappresentano un valore in virgola mobile
- Una "sequenza finale" di caratteri che sono unrec individuato (e che non influisce sulla conversione).
Se endptr
non è NULL
, quindi *endptr
è impostato a un puntatore al carattere immediatamente successiva all'ultimo carattere, che faceva parte della conversione (in altre parole, l'inizio della sequenza finale).
Mi chiedo: perché è endptr
, quindi, un puntatore a un puntatore non const
char
? Non è *endptr
un puntatore in una stringa const
char
(la stringa di input str
)?
È fondamentalmente lo stesso problema di 'strchr' e amici, tranne che qui abbiamo un puntatore out-param piuttosto che un valore di ritorno. –
@Steve: sì, ma è più problematico di 'strchr' perché non è possibile passare un indirizzo del puntatore qualificato' const' a queste funzioni senza un cast esplicito. –
Interessante domanda. Fondamentalmente questo significa che puoi nascondere un cast da 'char const *' a 'char *' dietro le funzioni 'strtoX'. Strano. –