2010-12-07 30 views
9

Bir program var ayrıştırılmıyordur ARGS. Ancak, çıkış şudur:C++, komut satırı düzgün

./Test.exe merhaba dünya

BAŞLAYAN Num girişler: 3 . h

w Bunun sadece sonlandırma karakteri kadar her argüman ilk karakter değil, tüm Char * bakıyor anlaşılmaktadır.

Herhangi bir fikri olan var mı?

Ek Notlar: VS2008 aracılığıyla oluşturuyorum ve esas olarak çalışması gereken bir örneği internete kopyalayıp yapıştırıyorum. Programı bash, powershell ve cmd'de çalıştırdım.

+3

İnanıyorum '_tmain() '' tchar'ı bekler – ruslik

+0

Programınızda bir 'ana' işlev koyarsanız yine de olur mu? IE, '_tmain' adını değiştirdikten sonra ... –

+0

İlgili: [http://stackoverflow.com/questions/895827/what-is-the-difference-between-tmain-and-main-in-c] (http://stackoverflow.com/questions/895827/what-is-the-difference-between-tmain-and-main-in-c) –

cevap

3

Kodunuzu Unicode modunda mı derliyorsunuz?

+0

Bu başka bir doğru cevap. Proje ayarlarımı çok baytlı karakter kümesine değiştirdim ve işe yarıyor. TEŞEKKÜRLER! – jbu

+0

@jbu: Bunu yapma, Unicode işlevselliğini kaybedersiniz. MBCS modu sadece geriye dönük uyumluluk içindir. – Philipp

17

Visual C++ projeniz Unicode olarak ayarlanmış ve ana işleviniz _tmain olarak adlandırılmıştır. Bu, Windows'un işlevinizi çağırdığı ve Unicode dizeleri geçirdiği anlamına gelir, ancak char * türünü kullanarak bunları ANSI dizeleri olarak değerlendirirsiniz. İlk Unicode karakterinin ikinci baytı boş olduğundan, bu bir karakterle ANSI dizesi olarak görünür.

+0

Doğru cevap budur. Proje ayarlarımı çok baytlı karakter kümesine değiştirdim ve işe yarıyor. TEŞEKKÜRLER! – jbu

+0

@jbu, bunu doğru cevap olarak ayarlamak isteyebilir. Seçmen düğmelerinin altında bir onay kutusu. – khachik

+0

Sigh ... bu tam olarak bundan ders almanız gereken ders değil, tamam. –

5

Büyük olasılıkla UNICODE ayarları ile derlenmiş. UNICODE tanımlanmışsa cout yerine wcout kullanılmalıdır. Ve tüm dizeler _T() içine konulmalıdır.

#ifdef UNICODE 
#define tout wcout 
#else 
#define tout cout 
#endif 

int _tmain(int argc, TCHAR* argv[]) 
{ 
    std::tout << _T("STARTING") << std::endl; 
    std::tout << _T("Num inputs: ") << argc << std::endl; 

    for(int i = 0; i < argc; i++) 
     std::tout << argv[i] << std::endl; 
+0

veya alternatif olarak, _UNICODE öğesinin her zaman tanımlandığını varsayarak (MBCS, Windows 9x uzun zaman önce öldüğünden beri gerçekten gerekli değildir), her yerde wmain'i ve wchar_t'yi kullanın. – Philipp

+0

Ayrıca, "wcout" hala çalışmıyor, bkz. Http://blogs.msdn.com/b/michkap/archive/2010/10/07/10072032.aspx – Philipp

4

İlk char? Bu, Unicode'un ANSI olarak yorumlandığı gibi kokuyor. Mantıklı. Eğer _tmain kullanıyorsanız, TCHAR'ı kullanmalısınız.