Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 18:30   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию String и массив char

Возможно, эта тема является баяном - но всё же, лазил я много где, а решения своей проблемы я так и не нашёл.
Программирую я в среде Microsoft Visual Studio 2010, проект типа Windows Forms.

Суть моей проблемы ...
Есть строка вида:
Код:
String ^fname=this->oFD->FileName
где oFD - OpenFileDialog.
Как вы уже должны были догадаться - из этой строки я должен получить путь к файлу.
Но, функция fopen принимает ТОЛЬКО массив символов, поэтому далее следует такой код:
Код:
char *chstr;
int size=fname->Length;
chstr=new char[size];
chstr[size]='\0'; // с этим проблем нет

for (int i=0;i<size;i++)
	chstr[ i ]=fname[ i ];
Собственно, на последней строчке вышеуказанного кода есть очччень маленькая проблемка: если fname[ i ] содержит кириллический символ - то в chstr[ i ] записывается фигня, именуемая каракулями.

Где то я узнал, что String работает в UTF-8, а в char записываются символы из AnsiString.
Поэтому, руководствуясь информацией и существующими знаниями я могу только в ручную выбирать символ по считанному UTF-8 коду, что не есть красиво и удобно (получилась примерно 70-строчная функция case 'ов).

Как можно решить данную проблему более лояльным путём ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 20.11.2013, 23:36   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Есть _wfopen. Но не стоит мешать управляемый и нативный код. Раз используете .Net, то и используйте его классы для работы с файлами.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 21.11.2013, 00:18   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Есть _wfopen. Но не стоит мешать управляемый и нативный код. Раз используете .Net, то и используйте его классы для работы с файлами.
Ну, если учесть то, что в институте нам говорят fopen(), который берёт только массив символов (указатель на таковой), то откуда же мне знать про другой способ открытия - а вообще, то что преподаватель называет "языком для профессионалов" - во всей его красе я наблюдаю срач.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 21.11.2013, 00:20   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Ну и да, как считать в массив символов, или же в String весь текстовый файл ?
fgets, fscanf и прочие читают всё, кроме служебных символов, типа разрыва строки и т.п. А мне как раз нужны символы разрыва строки.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 21.11.2013, 00:24   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Есть _wfopen. Но не стоит мешать управляемый и нативный код. Раз используете .Net, то и используйте его классы для работы с файлами.
Попробовал сей _wfopen - он требует const wchar_t, а у FileOpenDialog->FileName тип String - компилятор ругается.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 21.11.2013, 08:55   #6
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

http://msdn.microsoft.com/ru-ru/library/d1ae6tz5.aspx

Гугл - 0.1 сек, а сколько вы ждали ответа?...

П.С.
Цитата:
если учесть то, что в институте нам говорят fopen(), который берёт только массив символов (указатель на таковой), то откуда же мне знать про другой способ открытия
Я может открою вам тайну: в институте вам об очень многом не скажут и если вы будете ждать "манны небесной", то ничего и не получите... Как говорится, в вузах учат учится. Вон в американских самообразование вообще один из главных принципов.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 21.11.2013, 17:54   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
а вообще, то что преподаватель называет "языком для профессионалов"
Я подозреваю, что вы и преподаватель пишете на разных языках.

fopen - это С, вы пишете на каком-то .net диалекте языка С++.
waleri вне форума Ответить с цитированием
Старый 22.11.2013, 02:12   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Я подозреваю, что вы и преподаватель пишете на разных языках.

fopen - это С, вы пишете на каком-то .net диалекте языка С++.
Преподаватель преподаёт C++, "такой какой он есть" - его слова, типо "такие функции будут работать везде".
Но по его словам он работал на C++ два или три года, а последние три пишет на PHP. Поэтому в каком то смысле ваши подозрения оправданы.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из string в char tema65 Общие вопросы C/C++ 1 23.12.2011 19:12
string-char-wchar_t-char-string чето потерял magog7 Общие вопросы C/C++ 0 08.08.2011 20:21
string vs. char tools Общие вопросы C/C++ 9 22.12.2010 01:49
String и char Julinja Паскаль, Turbo Pascal, PascalABC.NET 9 03.01.2009 12:10
char->string eds Общие вопросы .NET 1 28.11.2007 17:22