[C++ / Linux] Odbieranie argumentów jak programy linuksowe.
Ostatnio zmodyfikowano 2011-12-24 12:30
akwes Temat założony przez niniejszego użytkownika |
[C++ / Linux] Odbieranie argumentów jak programy linuksowe. » 2011-12-23 21:44:47 Witam, jest takie pytanie. $ ./program -h 30 -w 50 -name "trolejbus.mp3"
I teraz argumenty do programu dostane pewnie tak /home/user/program -h 30 -w 50 -name "trolejbus.mp3"
Jest jakaś funkcja albo biblioteczka, która pozwoli na takie coś: GetValueOf( int argc, char ** argv, "-h" ); GetStringOf( int argc, char ** argv, "-name" );
Wiem że mogę to samemu łatwo napisać, ale może ktoś już gdzieś to napisał lepiej :) |
|
ison |
» 2011-12-23 23:21:28 nie wiem czy do tego jest jakaś osobna biblioteka, napisanie tego to kilka linijek ;) #include <cstdio> #include <string> #include <cstring>
int GetValueOf( const int argc, const char * const * const argv, const char * const label ) { for( int i = 1; i < argc; ++i ) { if( !strcmp( argv[ i ], label ) ) { if( i + 1 < argc ) { int val = 0; if( !sscanf( argv[ i + 1 ], "%d", & val ) ) return 0; else return val; } else return 0; } } return 0; }
std::string GetStringOf( const int argc, const char * const * const argv, const char * const label ) { for( int i = 1; i < argc; ++i ) { if( !strcmp( argv[ i ], label ) ) { if( i + 1 < argc ) return argv[ i + 1 ]; else return ""; } } return ""; }
int main( int argc, char ** argv ) { printf( "%d\n", GetValueOf( argc, argv, "-a" ) ); printf( "%s\n", GetStringOf( argc, argv, "-b" ).c_str() ); }
jakąś obsługę błędów czy coś można dorobić w zaznaczonych miejscach tak na marginesie to na początku napisałem z obsługą "" ale potem zorientowałem się, że "aaa bbb ccc" nie pójdzie jako 3 osobne parametry do argv tylko jako 1 aaa bbb ccc , przynajmniej tak jest na Windowsie (bez zbędnych spacji w kodzie :P - http://pastebin.com/DapGqSup) |
|
akwes Temat założony przez niniejszego użytkownika |
» 2011-12-24 12:30:26 Dzięki wielkie ;d |
|
« 1 » |