argv[2] == '-k' << wie macht man sowas richtig?



  • Moinsen, ich will den dritten eingabeparameter vergleichen mit '-k', leider geht es so nicht, aber wie geht es dann?



  • strcmp()
    strncmp()
    Strings kann man nicht mit den Vergleichsoperatoren vergleichen.



  • Ich wähle in so nem Fall immer folgende Methode:

    for ( count = 1; count < argc; count++ )
    	{
    		// check parameter -d xxxx
    			if ( strcmp( argv[count], "-d" ) == 0 )
    			{
    
    			}
    			else
    		// check parameter -f xxxx
    			if ( strcmp( argv[count], "-f" ) == 0 )
    			{
    
    			}
    			else
    		// check parameter -c xxxx
    			if ( strcmp( argv[count], "-c" ) == 0 )
    			{
    
    			}
    			else
    		// check parameter -c xxxx
    			if ( strcmp( argv[count], "-r" ) == 0 )
    			{
    
    			}
    			else
    		// check parameter -t (testmode)
    			if ( strcmp( argv[count], "-t" ) == 0 )
    			{
    
    			}
    			else
    		// unknown parameter
    			{
    				printf( "unknown parameter %s.\n", argv[count] );
    			}
    	}
    


  • oder eventuell etwas kürzer:

    if(argv[i][0]=='-') switch(argv[i][1])
    {
    case 'c'://param -c
      //...
      break;
    case 'd':
      //...
      break;
    }
    


  • Hallo,
    oder noch kürzer und effektiver:

    #include <stdio.h>
    #include <unistd.h>
    
    int main(int argc,char **argv) {
       char c;
    
        while ((c = getopt(argc, argv, ":abf:o:")) != -1) {
             switch(c) {
                case 'a': printf("Ein a \n"); break;
                case 'b': printf("Ein b \n"); break;
                case 'c': printf("Ein c \n"); break;
                case 'o': printf("Ein o mit: %s",optarg); break;
             }
    
          }
       return 0;
    }
    

    Denn die bisherigen Lösungen scheitern z.B. hier dran:
    prog.exe -f -n //Funktioniert
    prog.exe -fn //Funktioniert nicht, obwohl gänige Art unter Unix



  • vielen dank, funktioniert wunderbar!!


Anmelden zum Antworten