2015-01-26 83 views
-1

如何在使用C的字符串上實現getopt()相似的函數?字符串上的getopt()C

我目前應用此

#include <stdlib.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <strings.h> 
#include <fcntl.h> 


int main(int argc, char **argv){ 

    int ch,fd; 
    char *ip; 
    char *port; 
    char *user; 
    char message[100]; 
    message = "_connect -i 127.0.0.1 -p 1234 -u hello1"; 

    while ((ch = getopt(argc, argv, "i:p:u:")) != -1) { 
      switch (ch) { 
      case 'i': 
        if ((fd = open(optarg, O_RDONLY, 0)) < 0) { 
          printf("my ip is: %s\n", optarg); 

          //ip = optarg; 
        } 
        break; 

      case 'p': 
        if ((fd = open(optarg, O_RDONLY, 0)) < 0) { 
          printf("my port number is: %s\n", optarg); 
          //port = optarg; 

        } 
        break; 

      case 'u': 
        if ((fd = open(optarg, O_RDONLY, 0)) < 0) { 
          printf("my name is: %s\n", optarg); 
          //user = optarg; 

        } 
        break; 
      default:break; 
      } 
    } 
    argc -= optind; 
    argv += optind; 
    return 0; 
    } 

我需要的信息的行爲完全一樣的參數和getopt的功能,以接收分隔的數值請

回答

0

首先使用strtok(或strtok_r)到您的C字符串轉換成一個字符串數組。然後將其傳遞給getoptgetopt只使用argcargv,因爲這是你通過的。

如果你需要使用引號擔心自己(想想

hello "foo bar" baz 

是否有三個參數或兩個),那麼你可能想看看wordexp,或者如果你正在使用glibg-shell-parse-argv

+1

如果不止一次調用getopt,請不要忘記重置optind。 – 2015-01-26 22:17:45