0

C でコマンド ライン オプションと引数全体を 1 つの文字列に格納する方法はありますか。つまり、私のコマンドラインが./a.out -n 67 89 78 -i 9文字列である場合、コマンドラインstr全体を出力できるはずです。今、私ができることは、さまざまなベクトル形式で値を出力することです。

#include <stdio.h>
#include <getopt.h>
#include <string.h>


int main(int argc, char* argv[]) {
 int opt;

for(i=0;i<argc;i++){
printf("whole argv was %s\n", argv[i]);
}

while((opt = getopt(argc, argv, "n:i")) != -1) {
switch (opt){
    case 'n':
             printf("i was %s\n", optarg);
             break;

    case 'i':
             printf("i was %s\n", optarg);
             break;
      }
   }
  return 0;
 }

最初の引数のみを出力し、すべての引数を出力したいoptargので、文字列に格納した後に解析したいので、これが必要です。

4

3 に答える 3

2

できることは、argv をループして文字列を作成することです。strcat

char* CommandLine = 0;
unsigned int CommandLineLength = 0;
unsigned int i = 0;

for (i = 0; i < argc; i++) {
    CommandLineLength += strlen(argv[i]) + 3; // Add one extra space and 2 quotes
}

CommandLine = (char*) malloc(CommandLineLength + 1);
*CommandLine = '\0';

// Todo: Check if allocation was successfull...

for (i = 0; i < argc; i++) {
    int HasSpace = strchr(argv[i], ' ') != NULL;
    if (HasSpace) {
        strcat(CommandLine, "\"");
    }
    strcat(CommandLine, argv[i]);
    if (HasSpace) {
        strcat(CommandLine, "\"");
    }
    strcat(CommandLine, " ");
}
// Do something with CommandLine ...
free(CommandLine);
于 2013-08-15T14:58:57.943 に答える
0

プラットフォームによって異なります。

Windows では、 を使用できますGetCommandLine()

于 2013-08-15T15:14:57.673 に答える
-1

次のような関数を書くだけです。

char * combineargv(int argc, char * * argv)
{
    int totalsize = 0;
    for (int i = 0; i < argc; i++)
    {
       totalsize += strlen(argv[i]);
    }
    // Provides space for ' ' after each argument and a '\0' terminator.
    char *ret = malloc(totalsize + argc + 1);
    if (NULL == ret)
    {
        // Memory allocation error.
    }
    for (int i = 0; i < argc; i++)
    {
        strcat(ret, argv[i]);
        strcat(ret, " ");
    }
    return ret;
}

これは単にそれらすべてを結合し、引数の間にスペースを置きます

更新:バッファ オーバーフローの問題を解消するためにオリジナルを修正しました。

于 2013-08-15T15:08:28.730 に答える