2009-12-09 2 views
0

Как я написал приложение с функцией main(int argc, char * argv[])Как преобразовать указатель строки в 64-битную (_int64) переменную?

Когда я запустить приложение, я хочу отправить некоторые параметры, такие как (предположим, имя приложения ffdisk)

>ffdisk -f 111123123131321312312123 1 

Вы видите третьи из параметров могут быть параметр int64 в моем первоначальном намерении ...
Но в функции main argv [2] является указателем на строку, поэтому как преобразовать эту строку в переменную int64?

Thanx ...
Я всегда застрял в запутанных проблемах ....

ответ

2

Вы можете использовать _atoi64, функции _strtoi64 в stdlib.h

+0

Я принял ваше предложение с _atoi64 ... –

2

Там вы несколько способов, использовать некоторый ARGC/ARGV разбор библиотеку, или вручную использовать sscanf или библиотеку Атол функцию.

0

Для Linux, библиотека GNU C имеет getopt. Для Windows вы можете посмотреть на XGetopt

Или вы можете посмотреть на argtable (но я никогда не имел возможности использовать его)

Также в C++:

Boost.Program_option s позволяет разработчикам программ получить программы , то есть пары (имя, значение) от пользователя, используя обычные методы , такие как командная строка и файл конфигурации .

или

Пакет gflags содержит библиотеку, которая реализует обработку командной строки флаги. Таким образом, для getopt() используется замена . Он имеет повышенную гибкость, включая встроенную поддержку типов C++ типа , а также возможность определять флаги в исходном файле, в котором используются .

Просто выберите один.

2
#include <stdlib.h> 

int main(int argc, char** argv) { 
    second_parm_as_long_long = atoll(argv[2]); 
    return 0; 
} 
1

Поскольку вы нацеливаете Windows и Linux, вы можете оставаться в пределах функциональности, присутствующей в обеих системах. Это означает обычный стандарт C89.

Но обычный стандарт C89 не требует реализации для обеспечения 64-разрядного целочисленного типа. Итак, вы все равно застряли.

Если у вас есть тип (в зависимости от реализации), достаточно большой для ваших потребностей, вы можете создать номер немного по одной цифре ...

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 */ 
+0

спасибо похоже работа хорошо.я попробую это позже. Thanx –

Смежные вопросы