2012-09-04 2 views

답변

9

이 보이는 명령 줄 인수를 시뮬레이션하기 위해 초기화하지만 빠른 해킹 트릭 수행해야합니다

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

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

    // ... 
} 

를 또는으로 표준 입력을 변환 args :

#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(); 

    // ... 
} 
+0

내가해야 할 것 같아. 파이썬 프로그램은 어떻습니까? – lifebalance

+0

@lifebalance : err ... "유사하게"? :-) –

+0

나는 두 번째 방법을 선호합니다. 비슷한 파이썬 코드에 감사 할 것입니다. 감사! – lifebalance

2

그냥 당신이 할 수없는 것처럼

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

} 
5

파이썬에서 당신은 c 이 같은 하드 코드 :

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 
+0

shlex.split()을 사용하여 stdin에서 명령 줄을 구문 분석하여 (인수가 어떻게 전달되는지 에뮬레이션 할 수 있습니다. – jfs

+0

@ J.F.Sebastian이 더 잘 업데이트되었습니다. – jleahy

관련 문제