Come convertire un puntatore stringa a una variabile a 64 bit (_int64)?
-
18-09-2019 - |
Domanda
Come ho scritto un app con la funzione main(int argc, char * argv[])
Quando inizio l'applicazione, voglio inviare alcuni parametri come
(Assumere il nome di applicazione è ffdisk
)
>ffdisk -f 111123123131321312312123 1
Si vede il terzo param forse un param Int64 nella mia intenzione originale ...
Ma nella funzione principale, argv [2] è puntatore stringa, così come si può convertire questa stringa in una variabile Int64?
Grazie ...
Sono sempre bloccato a problemi disordinato ....
Soluzione
È possibile utilizzare _atoi64, funzioni _strtoi64 in stdlib.h
Altri suggerimenti
Ci sono diversi modi, utilizzare alcuni / biblioteca argv parsing argc, o manualmente utilizzare sscanf o Atol funzioni di libreria.
#include <stdlib.h>
int main(int argc, char** argv) {
second_parm_as_long_long = atoll(argv[2]);
return 0;
}
Come si sta rivolte a Windows e Linux, si consiglia di rimanere ben al della funzionalità presente su entrambi i sistemi. Ciò significa pianura C89 standard.
Ma pianura C89 standard non richiede implementazioni di fornire un tipo integer a 64 bit. Così, sei bloccato in ogni caso.
Supponendo di avere un tipo (a carico di attuazione) abbastanza grande per le vostre esigenze, è possibile creare il numero po ' cifra per cifra ...
value = 0; /* value is of the large enough type */
char *p = argv[2];
while (*p) {
value *= 10;
value += *p - '0';
p++;
}
/* if argv[2] was "111123123131321312312123"
* and the type is large enough,
* value now has 111123123131321312312123 */
Per Linux, la libreria C GNU ha getopt . Per Windows è possibile dare un'occhiata a XGetopt
Oppure si può dare un'occhiata a argtable (ma non ho mai avuto l'opportunità di usarlo)
Anche in C ++:
Boost.Program_option s permette sviluppatori di programmi per ottenere il programma opzioni, vale a dire (nome, valore) coppie da parte dell'utente, tramite convenzionali metodi come linea di comando e file di configurazione.
o
Il href="http://code.google.com/p/google-gflags/" rel="nofollow noreferrer"> gflags pacchetto contiene un libreria che implementa a riga di comando elaborazione bandiere. Come tale è un sostituzione getopt (). Esso ha maggiore flessibilità, compresi supporto integrato per C ++ tipi come stringa, e la possibilità di definire bandiere nel file di origine in cui sono abituati.
Basta scegliere uno.