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

Wygląda na to, że otrzymana jest tylko pierwsza litera argumentów ... Nie rozumiem dlaczego!Główny tylko odbierający pierwsze litery Argumenty:

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

wyjścia 1 i 1 bez względu na wszystko. (w MSVC 2010)

+1

Co to jest '_tmain'? W jakim środowisku pracujesz? –

+0

Zobacz odpowiedź na to pytanie http://stackoverflow.com/questions/895827/what-is-the-difference-between-tmain-and-main-in-in-c –

+0

Nie sądzę, że jest to duplikat. Jest inaczej sformułowany i nie jesteś pierwszym programistą, którego widziałem, natrafiając na dokładnie te symptomy. Więc to sformułowanie przynajmniej powinno pozostać IMHO. – EFraim

Odpowiedz

8

To nie jest char to wchar_t podczas kompilacji z zestawem UNICODE.

Jest skompilowany jako wmain. Linker po prostu nie zauważa, że ​​istnieje inny podpis, ponieważ jest to funkcja "eksportu C", a jej nazwa nie zawiera typów argumentów.

Więc to powinno być int _tmain (int argc, argv TCHAR **)

Konwersja char jest trudne i nie zawsze poprawne - Win32 warunkiem funkcja przełoży tylko aktualny kodowej ANSI poprawnie.

Jeśli chcesz użyć UTF-8 w swoich wewnętrznych aplikacji to trzeba szukać gdzie indziej konwertera (tak jak w Boost)

+0

Czy wiesz, jak przekonwertować na char? – Cenoc

+0

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

+0

Nie konwertuj na ' char' w ogóle. – Philipp

0

Nie używaj typ char danych w systemie Windows, to łamie wsparcie Unicode. Zamiast tego użyj funkcji "szerokich". W C++ unikaj stdio C, zamiast tego użyj strumienia plików:

#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()); 
} 
Powiązane problemy