Strtod ()
La funzione strtod(), dichiarata nel file header "/usr/include/stdlib.h'" come segue:
double strtod (const char *__restrict __nptr, char **__restrict __endptr)
converte un numero, rappresentato in una stringa, in un valore di tipo double del C, corrispondente nel tipo Float di Gambas.
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C libc.so.6, nella quale la funzione è contenuta:
Private Extern strtod(__nptr As String, __endptr As Pointer) As Float In "libc:6"
Passata al primo parametro della funzione strtod( ) una stringa di caratteri alfanumerico, se detta stringa comincia a sinistra per uno o più caratteri numerici, la funzione esterna restitirà - come valori di tpo 'Float - la parte numerica a sinistra. in tal caso, se al secondo parametro è stato passato è un Puntatore di Puntatore (che ovviamente richiede l'allocazione di adeguata quantità di memoria), la restante parte della stringa verrà memorizzata nell'area di memoria puntata da tale variabile di tipo Puntatore.
Vediamo un esempio pratico:
Library "libc:6" ' double strtod (const char *__restrict __nptr, char **__restrict __endptr) ' Convert a string to a floating-point number. Private Extern strtod(__nptr As String, __endptr As Pointer) As Float Public Sub Main() Dim s As String Dim f As Float Dim p As Pointer s = "123456testo 1234 qualsiasi" p = Alloc(SizeOf(gb.Byte), Len(s)) f = strtod(s, p) ' Per poter leggere la sola parte alfanumerica (a destra) della stringa, è necessario dereferenziare il Puntatore di Puntatore: Print "Parte 'Float': "; f; "\nRestante parte di tipo 'String': "; String@(Pointer@(p)) Free(p) End
Se il secondo parametro è posto a 0 (zero), allora la funzione strtod( ) restituirà la sola parte di tipo Float.
Esempio pratico:
Library "libc:6" ' double strtod (const char *__restrict __nptr, char **__restrict __endptr) ' Convert a string to a floating-point number. Private Extern strtod(__nptr As String, __endptr As Pointer) As Float Public Sub Main() Dim s As String Dim f As Float s = "123456testo 1234 qualsiasi" f = strtod(s, 0) Print "Parte 'Float': "; f End