14

ideone オンライン インタープリター ( http://ideone.com/ ) を使用して、いくつかの C++ および Python プログラムをテストしています。STDIN 入力を使用する代わりに、コマンド ライン引数を指定するにはどうすればよいですか?

4

3 に答える 3

9

できないように見えますが、簡単なハックでうまくいくはずです。

static char * const ARGV[] = { "myprog", "hello", "world", NULL };

int main(int argc, char * argv[])
{
    argc = 3;
    argv = ARGV;

    // ...
}

または、標準入力を引数に変換します。

#include <vector>
#include <string>
#include <iterator>
#include <iostream>

std::vector<char *> fabricate(std::vector<std::string> & v)
{
    std::vector<char *> res(v.size() + 1, NULL);
    for (std::size_t i = 0; i != v.size(); ++i) { res[i] = &v[i][0]; }
    return res;
}

std::vector<std::string> args_vector((std::istream_iterator<std::string>(std::cin)), std::istream_iterator<std::string>());

std::vector<char *> argv_vector = fabricate(args_vector);


int main(int argc, char * argv[])
{
    argc = args_vector.size();
    argv = argv_vector.data();

    // ...
}
于 2012-09-04T07:07:46.157 に答える
5

Python では、次のようにハードコーディングできます。

import sys

print sys.argv
sys.argv[1:] = ["test1", "test2"]
print sys.argv

これは出力されます:

['prog.py']
['prog.py', 'test1', 'test2']

標準入力から読み取るには:

import sys
import shlex

print sys.argv
sys.argv[1:] = shlex.split(None)
print sys.argv
于 2012-09-04T09:43:11.647 に答える
3

コマンドライン引数をシミュレートするために初期化するだけです

static char *argv[] = {"program_name", "1st argument", "2nd argument", NULL};
static int argc = 3;
int main() {

}
于 2012-09-04T07:07:13.647 に答える