Основной только получение первые буквы аргументов

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

Кажется, как будто только первая буква аргументов получена... Я не добираюсь почему!

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

выводы 1 и 1 несмотря ни на что. (в MSVC 2010)

6
задан Benjamin 28 December 2013 в 10:45
поделиться

3 ответа

Это не char, а wchar_t при компиляции с установленным UNICODE.

Он компилируется как wmain. Линкер просто не замечает, что сигнатура другая, потому что это "export C" функция и в ее имени не указаны типы аргументов.

Так что должно быть int _tmain(int argc, TCHAR** argv)

Преобразование в char хитрое и не всегда корректное - функция, предоставляемая Win32, корректно переведет только текущую ANSI кодовую страницу.

Если вы хотите использовать UTF-8 во внутренних компонентах приложения, то вам придется искать конвертер в другом месте (например, в Boost)

8
ответ дан 10 December 2019 в 00:31
поделиться

Ваша строка аргумента входит как UNICODE.

См. Этот вопрос

2
ответ дан 10 December 2019 в 00:31
поделиться

Не используйте тип данных char в Windows, это нарушает поддержку Unicode . Вместо этого используйте «широкие» функции. В C ++ избегайте stdio C, используйте вместо этого файловые потоки:

#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());
}
0
ответ дан 10 December 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: