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

Parece que solo se recibe la primera letra de los argumentos ... ¡No entiendo por qué!Principal solo recibiendo primeras letras de argumentos

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

salidas 1 y 1 pase lo que pase. (en MSVC 2010)

+1

¿Qué es '_tmain'? ¿En qué entorno estás trabajando? –

+0

Ver la respuesta en esta pregunta http://stackoverflow.com/questions/895827/what-is-the-difference-between-tmain-and-main-in-c –

+0

No creo que sea un duplicado. Está redactado de manera diferente, y usted no es el primer desarrollador que he visto tropezar exactamente con estos síntomas. Así que esta formulación al menos debería permanecer en mi humilde opinión. – EFraim

Respuesta

8

No es char es wchar_t cuando compila con UNICODE conjunto.

Se compiló como wmain. Linker simplemente no nota que hay una firma diferente, porque es la función "exportar C" y su nombre no contiene sus tipos de argumentos.

lo que debe ser int tmain (int argc, argv TCHAR **)

la conversión a char es complicado y no siempre correcta - Win32 proporcionan función sólo se traducirá la página de códigos ANSI actual correctamente.

Si desea utilizar UTF-8 en sus partes internas de aplicación a continuación, usted tiene que mirar para el convertidor en otros lugares (como en Boost)

+0

¿Sabrías cómo convertir a char? – Cenoc

+0

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

+0

No convertir a ' char' en absoluto. – Philipp

0

No utilice el tipo de datos char en Windows, se rompe el soporte Unicode. Use las funciones "anchas" en su lugar. En C++, evite el stdio de C, use cadenas de archivos en su lugar:

#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()); 
} 
Cuestiones relacionadas