2010-07-28 5 views
0

VS2005에서 C++ 프로그램을 실행하고 있는데 프로젝트 속성 -> 디버그 -> 명령 줄 args에 하나의 인수 만 설정했고 예를 들어 profile1.dll이라는 이름이 지정되어 있습니다.Visual Studio C++에서 프로그램 인수를 읽는 중 문제가 발생했습니다.

는 여기에 내가

를 얻을 코드가 출력에서 ​​

cout<<"number of arguments:" << argc<<endl; 

for (int i=0; i<argc; i++) 
     cout << "argument " << i << ": " << argv[i] << endl; 

을 니펫

number of arguments:2 
argument 0: c 
argument 1: p 
는 인수의 이름을 인쇄하지 않는 이유

은 몰라?

+1

내 생각 엔 주된 방법은 argv에 char *가 아닌 char * 타입이 있습니다. 주된 메소드 선언을 보지 않고서는 확실히 알 수 없습니다. –

+0

나는 Bob의 답변이 하나라고 생각한다. 유니 코드를 사용하고 있으며 0은 전체 문자열을 인쇄하지 못하게합니다. UNICODE 함수를 사용하여 문자열을 인쇄하십시오. –

답변

5

exe의 이름이 C로 시작합니까? 문자열을 예상하고 하나의 문자 만 가져 오는 경우는 대개 UTF-16 유니 코드의 서구 알파벳이 ANSI 문자를 번갈아 사용할 때 0을 효과적으로 사용한다는 것을 발견했기 때문입니다. 유니 코드를 컴파일하고 있습니까?

+0

유니 코드를 사용하고 있습니다. 멀티 바이트로 변경했지만 여전히 동일한 출력 –

+0

@ Kobac : 유니 코드를 사용할 때 std :: cout 대신 std :: wcout을 사용해야합니다. – Sjoerd

+0

+1 - 좋은 캐치! –

0

main의 프로토 타입을 넣을 수 있습니까? 당신이하는 일은 분명히 괜찮습니다.

int main(int argc, char **argv) 

는 희망이 도움이 :

확실히 메인의 함수 프로토 타입이 비슷한 있는지 확인합니다.

+0

'int _tmain (int argc, char * argv []) // TCHAR *' 그래서 기본적으로 argv []에 대해 _TCHAR * 이었지만, 그렇다면 정수가 출력되므로 char * –

+1

으로 변경했습니다 @ Kobac : 다시 TCHAR로 변경하고 std :: cout 대신 std :: wcout을 사용합니다. – Sjoerd

+0

이제 어떤 일이 일어나는지 봅니다. 유니 코드를 사용하고 있으며 0은 전체 문자열을 인쇄하지 못하게합니다. 밥의 대답을 확인하십시오. –

3

argv[0]은 프로그램의 이름입니다. argv[1]이 첫 번째 매개 변수입니다. main()의 관련 매개 변수를 char *argv[] 또는 char **argv 대신 char* argv으로 선언 한 것 같습니다.

+0

그러나 OP는 이미 파블로의 대답에 대해 char * argv로 선언했다고 대답했습니다. 여기 뭔가가 잘못되었습니다. –

+1

@kobac : 내 답변을 수락 해 주셔서 감사합니다. 그러나 지적했듯이 문제의 원인이 아닙니다. 대신 @ Bob Moore의 대답을 받아 들일 수 있습니까? – Vicky

+0

올해의 페어 플레이! :) –

1

TCHAR을 그대로 둡니다. 괜찮습니다.

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    for (int i=0; i<argc; i++) 
    wcout << "argument " << i << ": " << argv[i] << endl; 

    return 0; 
} 

그렇지 않으면 유니 코드없이 컴파일하고 코드를 그냥있는 그대로 작동합니다 (그리고 유니 코드 매개 변수와 함께 작동하지 않습니다 : O)

당신이 유니 코드로 컴파일 출력 wcout 사용하는 경우

"프로젝트 프로퍼티/일반/문자 세트"에서 찾을 수 있습니다.

관련 문제