2010-07-09 6 views
6
int _tmain(int argc, char** argv) 
    { 
     FILE* file1=fopen(argv[1],"r"); 
     FILE* file2=fopen(argv[2],"w"); 
    } 

Il semble que seule la première lettre des arguments est reçue ... Je ne comprends pas pourquoi!Principal recevant seulement les premières lettres des arguments

std::cout<<"Opening "<<strlen(argv[1])<<" and writing to "<<strlen(argv[2])<<std::endl; 

sorties 1 et 1 quoi qu'il arrive. (dans MSVC 2010)

+1

Qu'est-ce que '_tmain'? Dans quel environnement travaillez-vous? –

+0

Voir la réponse à cette question http://stackoverflow.com/questions/895827/what-is-the-difference-between-tmain-and-main-in-c –

+0

Je ne pense pas que ce soit un doublon. C'est écrit différemment, et vous n'êtes pas le premier développeur que j'ai vu trébucher sur ces symptômes. Donc, cette formulation devrait au moins rester à mon humble avis. – EFraim

Répondre

8

Ce n'est pas char c'est wchar_t lorsque vous compilez avec UNICODE ensemble. Il est compilé en tant que wmain. Linker ne remarque tout simplement pas qu'il existe une signature différente, car c'est la fonction "export C" et son nom ne contient pas ses types d'arguments.

il devrait donc être int _tmain (int argc, TCHAR ** argv)

Conversion en char est délicate et pas toujours correcte - Win32 fonction à condition de ne traduire que correctement le courant ANSI codepage.

Si vous souhaitez utiliser UTF-8 dans vos applications internes d'alors vous devez chercher le convertisseur ailleurs (comme dans Boost)

+0

Savez-vous comment convertir en char? – Cenoc

+0

@Cenoc: http://stackoverflow.com/questions/159442/what-is-the-simplest-way-to-convert-char-to-from-tchar-in-c-cms –

+0

Ne pas convertir en ' char' du tout. – Philipp

0

Ne pas utiliser le type de données char sur Windows, il se casse le support Unicode. Utilisez plutôt les fonctions "larges". En C++, évitez le stdio de C, utilisez plutôt les flux de fichiers:

#include <cstdlib> 
#include <string> 
#include <fstream> 
int wmain(int argc, wchar_t** argv) { 
    if (argc <= 2) return EXIT_FAILURE; 
    const std::wstring arg1 = argv[1]; 
    const std::wstring arg2 = argv[2]; 
    std::ifstream file1(arg1.c_str()); 
    std::ofstream file2(arg2.c_str()); 
} 
Questions connexes