Strtod ()

Da Gambas-it.org - Wikipedia.
Versione del 4 feb 2017 alle 14:22 di Vuott (Discussione | contributi) (Creata pagina con "La funzione '''strtod()''', dichiarata nel file header "''/usr/include/stdlib.h'" come segue: double strtod (const char *__restrict __nptr, char **__restrict __endptr) conver...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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



Riferimenti