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

Sembra che solo la prima lettera degli argomenti sia stata ricevuta ... Non capisco perché!Main riceve solo le prime lettere di argomenti

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

uscite 1 e 1 non importa quale. (in MSVC 2010)

+1

Che cos'è '_tmain'? In quale ambiente stai lavorando? –

+0

Vedere la risposta in questa domanda http://stackoverflow.com/questions/895827/che-è-la-differenza-tra-main-e-main-in-c –

+0

Non penso che sia un duplicato. È formulato in modo diverso, e tu non sei il primo sviluppatore che ho visto inciampare proprio su questi sintomi. Quindi questa formulazione almeno dovrebbe rimanere IMHO. – EFraim

risposta

8

Non è char è wchar_t quando si sta compilando con il set UNICODE.

È compilato come wmain. Linker non si accorge che esiste una firma diversa, perché è la funzione "export C" e il suo nome non contiene i suoi tipi di argomenti.

quindi dovrebbe essere int _tmain (int argc, TCHAR ** argv)

Conversione in char è difficile e non sempre corretto - Win32 fornito funzione tradurre solo la tabella codici ANSI corrente in modo corretto.

Se si desidera utilizzare UTF-8 nei vostri internals di applicazione allora si deve guardare per il convertitore altrove (ad esempio in Boost)

+0

Sapresti come convertire in char? – Cenoc

+0

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

+0

Non convertire in ' char' a tutti. – Philipp

0

Non utilizzare il tipo di dati char su Windows, si rompe il supporto Unicode. Utilizzare invece le funzioni "larghe". In C++, evitare lo stdio di C, utilizzare invece i flussi di file:

#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()); 
} 
Problemi correlati