|
|
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Всем привет. У меня така проблема: надо диплом написать на С++ в Visual Studio(диплом по сути дела заключается в некоей хитрой обработке файлов). Вот... А с этим С++ я знаком не очень хорошо. Дак вот, вчера(и позавчера) сидел полночи, читал Страуструпа, еще разных дядек умных читал - в теории все легко, я во время учебы на Си обыкновенном писал программки без проблем. А вот на практике, когда я Visual Studio(далее просто VS) включил - фигня какаято. Тяк что если кто в курсе - просветите меня по следующим вопросам(извиняюсь, если они покажутся Вам глупыми и тупыми :) ) : 1) Насколько я понял в VS есть просто функции, константы, а есть их дотНетовские эквиваленты. Мне с дотНетом работать гораздо удобней - наклепал форму, присобачил ей функции и зер гут. Но возникла проблема следующего плана: стандартный способ читания файла(смотрел пример в МСДН) - считывает все в переменную типа String^(че за ^ понятия не имею). И все текстовые свойтва контролов(там например Text иль Caption) требуют строку такого типа. И все бы хорошо, и функции для обработки таких строк удобные, и файл считывается прекрасно и ваще все гут, НО... Почемуто не читаются русские буквы из файла и(что меня гораздо больше бесит!) такой тип String^ нельзя использовать в конструкции struct, которая мне очень удобна. Если ктонибудь в курсе, можно ли как то использовать подобный тип с русскими буквами и со struct-ом - подскажите пжлста. 2) Следующие вопросы уже от того, что не могу добиться толку с первым вариантом. Использую стандартные fopen, fgets и т.д. и т.п. Во-первых, можно ли как нибудь считать весь файл в одну строку(желательно чтоб эта строка была типа std::string). Во-вторых, можно ли потом обработанную переменную типа string записать в файл? И вообще, абсолютно не могу понять следущей фигни(наверно я очень тупой): std::string s; char* ch1; char ch2[20]; FILE *fr; s="1"; ch1="1"; if (fopen_s(&fr, "1.txt", "r") == 0){ // функция char *fgets(char *str, int n, FILE *stream); //Функция типа char* !, параметры сами видите какие, дак вот fgets(ch1, 20, fr); //какая то опшибка, ети! fgets(ch2, 20, fr); //нет опшибки! // Пачиму?, ведь первый параметр типа char*, не догоняю. Ладно, далее... s=fgets(ch1, 20, fr); //переменной типа string присваивается результат функции типа char* без проблем! ch1=fgets(ch1, 20, fr); //переменной типа char* присваивается результат функции типа char* без проблем! s=ch1 // как я тут не выпендривался, а присвоить не удалось - почему?, ведь секунду назад все было гут? fclose(fr); }; Ну и так далее. Не хочу дальше грузить Вас своими тупыми вопросами. Если кому нить не сложно - ответьте не очень умному человеку пжлста, буду очень и очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 11:49 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Массив - это идентификатор участка памяти. Имя массива всегда указывает на определенный участок памяти. Указатель - переменная содержащая адрес памяти. Необходимо иницировать каким-то значением, иначе он будет указывать неизвестно куда. В fgets надо передовать указатель на участок памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 12:58 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Romka_84Почемуто не читаются русские буквы из файлапри открытии файла выставляй кодировку, читай доки. Romka_84и(что меня гораздо больше бесит!) такой тип String^ нельзя использовать в конструкции struct, которая мне очень удобна.управляемые типы можно использовать только в управляемых типах. МС++ – язык со своими фичами http://msdn2.microsoft.com/en-us/library/xey702bw.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:24 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
AkhМассив - это идентификатор участка памяти. Имя массива всегда указывает на определенный участок памяти. Указатель - переменная содержащая адрес памяти. Необходимо иницировать каким-то значением, иначе он будет указывать неизвестно куда. В fgets надо передовать указатель на участок памяти. Огромное спасибо за пояснение. Но, толи я чет туплю, толи еще что нибудь: char* ch1; FILE *fr; ch1="1"; //насколько я понял, ты это имеешь ввиду if (fopen_s(&fr, "1.txt", "r") == 0){ fgets(ch1, 20, fr); //какая то опшибка, ети!, неважно инициировано ch1 значением или нет Такая вот фигня - не могу понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:36 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
maXmo Romka_84Почемуто не читаются русские буквы из файлапри открытии файла выставляй кодировку, читай доки. Romka_84и(что меня гораздо больше бесит!) такой тип String^ нельзя использовать в конструкции struct, которая мне очень удобна.управляемые типы можно использовать только в управляемых типах. МС++ – язык со своими фичами http://msdn2.microsoft.com/en-us/library/xey702bw.aspx Спасиб большое, справку почитаю обязательно. И, если не сложно, кодировку при чтении как выбирать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:38 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Romka_84 AkhМассив - это идентификатор участка памяти. Имя массива всегда указывает на определенный участок памяти. Указатель - переменная содержащая адрес памяти. Необходимо иницировать каким-то значением, иначе он будет указывать неизвестно куда. В fgets надо передовать указатель на участок памяти. Огромное спасибо за пояснение. Но, толи я чет туплю, толи еще что нибудь: char* ch1; FILE *fr; ch1="1"; //насколько я понял, ты это имеешь ввиду if (fopen_s(&fr, "1.txt", "r") == 0){ fgets(ch1, 20, fr); //какая то опшибка, ети!, неважно инициировано ch1 значением или нет Такая вот фигня - не могу понять. Во первых "1" может находится в какой-нибудь статической/read-only памяти и писать туда нельзя. Точно не уверен. А во вторых в "1" есть всего 2 байта, а ты читаешь туда 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 14:48 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Romka_84кодировку при чтении как выбирать?в конструкторе StreamReader'a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 15:22 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
а ты не пробовал: char* ch1[]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 18:09 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Romka_84 if (fopen_s(&fr, "1.txt", "r") == 0){ Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 18:20 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
только под fr необх. выделить память ) а вообще, см. MSDN: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 18:22 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
maXmoуправляемые типы можно использовать только в управляемых типах. МС++ – язык со своими фичами http://msdn2.microsoft.com/en-us/library/xey702bw.aspx По ентому делу почитал справку. Вродь все написано, но чет не могу опять до конца догнать. Например такой вот текст: public ref struct MyStruct{ //для того чтоб тип String^ ипользовать нужно ref String^ s; int n;} Теперь из таких элементов мне нужен массив, к примеру так: public ref struct Arr{ array<MyStruct^>^ m; //здесь компилятор почему то просит две ^, хотя в МСДН приводится пример с одной int max; } Так все компилится. Вопрос: а как дальше то собственно этот массив использовать? пишу к примеру так: Arr a; a.m[0]->s="qwerty"; //на этой строке вылетает опшибка //вроде бы нужно с этим массивом чет сделать, делаю по аналогии с МСДН: a.m = gcnew array<MyStruct^>(100); //вроде бы опять все компилится но при строке a.m[0]->s="qwerty" опять вылетает та же опшибка Если ктонить в курсе как делать такую штуку - подскажите пжлста, у меня ток в этом загвоздка и осталась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 15:12 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
у тебя же везде ссылочные типы. Их надо инициализировать. А то сначала же у тебя всё по нулям. Код: plaintext 1. 2. 3. и учись читать сообщения об ошибке, там много полезного пишут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 15:39 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
maXmoу тебя же везде ссылочные типы. Их надо инициализировать. А то сначала же у тебя всё по нулям. Код: plaintext 1. 2. 3. и учись читать сообщения об ошибке, там много полезного пишут. Спасибо просто преогромное! А сообщение об опшибке было как бы сложно понять ), непосредственно во время выполнения выскочило - по адресу такомуто произошла фигня - че такое я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 15:46 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
Romka_84А сообщение об опшибке было как бы сложно понять ), непосредственно во время выполнения выскочило - по адресу такомуто произошла фигня - че такое я не знаю.вот и говорю учись читать, компиль в дебуг и читай, без этого ты много не напишешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:33 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
maXmo Код: plaintext 1. 2. 3. И еще вопросик. А как потом это чистить. У меня в цикле этот массив используется многократно и в какой то счастливый момент программа вылетает. Я так понимаю скорее всего из-за переполнения. Использую Clear, все равно вылетает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 11:13 |
|
||
|
Такой вот вопросик по С++
|
|||
|---|---|---|---|
|
#18+
управление памяти в .нете автоматическое. А проблему в формулировке «у меня ничо не работает» тебе никто решать не будет. Я уже сказал читать сообщения об ошибке, и вспомни наконец про дебаггер, он сделан специально для борьбы с ошибками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 10:48 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2029095]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
7ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 439ms |

| 0 / 0 |
