2010-11-19 17 views
2

Olası Çoğalt:
What is the difference between _tmain() and main() in C++?Sorun ana app içine Char * argv [] geçen

Tamam, buradaki sorun ne olduğuna dair ipucu yok. C++'daki argv'yi kullanarak bazı dosya adlarını okumaya çalışıyorum, ancak bir nedenle dosya adının yalnızca ilk karakteri geçiyor. Size kodun bir kısmını gösteriyorum.

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 

Burada sorun nedir? Herhangi bir yardım çok takdir edecektir. Teşekkürler.

+1

Bu neden C++ 'olarak etiketlenmiştir? 'C' olmalı. – sbi

+1

@sbi: "C++ ** 'da argv ** kullanarak bazı dosya adlarını okumaya çalışıyorum." C++ olarak etiketlenmelidir. Ya da hiçbir dil, 'printf' ;-) kullanan koddaki C++ etiketini görmeye dayanamıyorsanız. –

+0

'int _tmain (int argc, TCHAR * argv []) 'olmalıdır – jwueller

cevap

1

Benim tahminim ortamınızı geniş karakter kümesini kullanır. Yani wprintf veya wcout çalışıyorsa deneyebilirsiniz. Programınız mükemmel çalışıyor ve çıktı var.

+0

' wprintf'? –

+0

@Let_Me_Be: tam olarak. 'Char *' ile '_tmain' kullanma, kişinin hatasıdır. Derleyicinin şikayet etmediğine biraz şaşırdım. –

0

Eğer biçim belirteci olarak %s veya %c kullanıyorsanız

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

kontrol eder misiniz?

+0

Linux altında derlediniz mi? _tmain bir Microsoft uzantısı, bu yüzden OP neredeyse kesinlikle Windows sistemi altında derleniyor. – Simone

0

C dizi indeksleri böylece s1 sizin başlatma okumalısınız sıfırdan başlar:

char* s1 = argv[0]; 
0

Bir _tmain istiyorsanız, bir TCHAR * argv yapmak gerekir.