ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

19.09.2008, 14:52
|
|
Участник форума
Регистрация: 20.11.2006
Сообщений: 172
Провел на форуме: 539954
Репутация:
106
|
|
4p3
Да нет, компилятор ничего не преобразовывал  . То что я привел, я согласен бред полнейший. Это я привел просто для примера, т.к. правильно сделать не знаю пока как. Вот и обращаюсь за помощью
|
|
|

20.09.2008, 01:01
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Сообщение от ++Norton++
4p3
Да нет, компилятор ничего не преобразовывал  . То что я привел, я согласен бред полнейший. Это я привел просто для примера, т.к. правильно сделать не знаю пока как. Вот и обращаюсь за помощью
вот выдалось время свободное
Код:
//---------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
void PrintVarArg(char** args, int nArgsCount)
{
for (int i = 0;i < nArgsCount;++i)
cout << args[i];
}
#pragma argsused
int main(int argc, char* argv[])
{
char *szArgs[] = {"dalek", "kaled"};
PrintVarArg(szArgs, 2);
system("pause");
return 0;
}
//---------------------------------------------------------------------------
|
|
|

20.09.2008, 20:41
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Есть такой вопросик: почему не работает ф-я CharToOem() в Visual Studio2008(C++9), тоесть ругается с ошибкой
error C2664: 'CharToOemW' : cannot convert parameter 1 from 'char [7]' to 'LPCWSTR'
В С++ 6 все отлично работало, а тут не хочет, может кто знает в чем тут проблема?
char z[] = "ПревеД";
CharToOem(z,z);
Последний раз редактировалось horlyk; 20.09.2008 в 21:06..
|
|
|

20.09.2008, 21:19
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Юзай уникод, ВС9 заточена под уникод
wchar_t *wcString = L"Preved";
|
|
|

20.09.2008, 21:47
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
а немного по подробнее можно? как к примеру вывести на консольный экран:
char z[] = "ПревеД";
puts(z);
чтобы на консоле отображало ПревеД а не хз что. А то я попробовал то что ты написал, так там цифры одни.
И еще, можно както глобально делать перекодировку в ср1251 без CharToOem()? а то немного напряжно постоянно использовать эту ф-ю для каждой переменной.
И все же, как тут правильно использовать CharToOem()? интересно всетаки что они изменили.
|
|
|

20.09.2008, 22:25
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
horlyk, первый параметр CharToOem - источник, второй - приемник. Просто IMHO, я бы не совмещал их. Хз что может произойти, это, конечно, зависит от реализации.
Тем более NecroSoft MSDN вот что выдает
Return Value
The return value is always nonzero except when you pass the same address to lpszSrc and lpszDst in the wide-character version of the function. In this case the function returns zero and GetLastError returns ERROR_INVALID_ADDRESS.
Так... теперь немножко теории.
wchar_t это по сути дело тот же short. Потому, используя, cout ты получаешь на выходе цифры.
Теперь перейдет в "раздел как это решить".
использовать wcout. Он нормально вывод уникод. Можешь написать свою функцию, которая будет вызывать CharToOem и выводить. Можешь вызывать
setlocale(LC_ALL, "Russian");
она тоже ничего 
|
|
|

21.09.2008, 12:39
|
|
Участник форума
Регистрация: 11.04.2007
Сообщений: 219
Провел на форуме: 982101
Репутация:
13
|
|
а лутше просто поставь в настройках проекта мульти байт код и должно работать.
|
|
|

21.09.2008, 13:31
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
чет я немного не догоняю, wcout тож не хочет русские букви выводить.
wchar_t z[7] = L"ПревеД";
wcout << z << endl;
пробовал и просто чар. Плз, напишите ктото маленький примерчик.
|
|
|

21.09.2008, 15:31
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Код:
#include <iostream>
#include "stdafx.h"
using std::wcout;
int _tmain()
{
wchar_t *wcString = L"ненене";
setlocale(LC_ALL, "Russian");
wcout << L"дадада!" << L" " << wcString << std::endl;
_wsystem(L"pause");
return 0;
}
|
|
|

24.09.2008, 23:00
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Сообщение от 4p3
Код:
#include <iostream>
#include "stdafx.h"
using std::wcout;
int _tmain()
{
wchar_t *wcString = L"ненене";
setlocale(LC_ALL, "Russian");
wcout << L"дадада!" << L" " << wcString << std::endl;
_wsystem(L"pause");
return 0;
}
В общем ошибка такая:
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
когда убрал _t и оставил просто main, то ошибка исчезла.
При компиляции ошибок небыло, а вот при дебаге или запуске...
спс за помощь 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|