2010-11-19 2 views
2

가능한 중복 :
What is the difference between _tmain() and main() in C++?문제의 주요 응용 프로그램에 숯불 *의 변수는 argv []를 전달

OK, 나는 여기에 문제가 무엇 단서를하지 않았습니다. C++에서 argv를 사용하여 일부 파일 이름을 읽으려고하지만 어떤 이유로 인해 파일 이름의 첫 번째 문자 만 전달됩니다. 코드의 일부를 보여줍니다.

int _tmain(int argc, char * argv[]) 
{ 
    int i; 
    char *s1 = argv[1]; 
    printf("%s\n", s1); 

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

//The argv[1] I am passing is a file name like "TestFile.txt" 
//The print out that I am getting is: 
//T 
//T 

여기서 어떤 문제가 발생합니까? 어떤 도움이라도 대단히 감사 할 것입니다. 감사합니다. .

+1

왜이 태그는'C++'입니까? 'c'여야합니다. – sbi

+1

@sbi : "C++에서 argv **를 사용하여 일부 파일 이름을 읽으려고합니다."** C++로 태그 지정되어야합니다. 또는'printf' ;-)를 사용하는 코드에서 C++ 태그를 볼 수 없다면 언어가 없습니다. –

+0

'int _tmain (int argc, TCHAR * argv [])'이어야합니다. – jwueller

답변

1

내 생각에 환경이 넓은 문자 집합을 사용하고있는 것 같습니다. 따라서 wprintf 또는 wcout이 작동하면 시도 할 수 있습니다.

+0

'wprintf'를'char *'로 만드시겠습니까? –

+0

@Let_Me_Be : 정확하게. '_tmain'에'char *'를 사용하면 질문자의 실수입니다. 나는 컴파일러가 불평하지 않는다는 것에 약간 놀랐다. –

0

프로그램이 완벽하게 작동하며 여기에 출력됩니다. 당신은 형식 지정자로 %s 또는 %c를 사용하는 경우

$ ./a.out textfile.txt 
textfile.txt 
textfile.txt 

당신은 확인시겠습니까?

+0

Linux에서 컴파일 했습니까? _tmain은 Microsoft 확장이므로 OP는 Windows 시스템에서 거의 확실히 컴파일됩니다. – Simone

0

C의 배열 인덱스 때문에 S1의 당신의 초기화가 읽어야 0에서 시작 :

char* s1 = argv[0]; 
0

당신이 _tmain을 원하는 경우에, 당신은 TCHAR * 변수는 argv를 확인해야합니다.

관련 문제