![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| alex22222 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.11.2004 Репутация: нет Всего: нет |
What is wrong in C++?
Осваиваю язык С++ на MS VC++ 6.00 Win98. Написал простую программу для работы с указателями, однако она не работает. Что тут не так? Дебагер пишет ошибку: Access Violation Вот текст файла // TestLearnDlg.cpp : implementation file // #include "stdafx.h" #include "TestLearn.h" #include "TestLearnDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ……… void CTestLearnDlg::OnButtontest1() { char* mystr1; char* mystr2; mystr1 = "mytest"; L= strlen(mystr1); for (i =0; i<L; i++) { *mystr2 = *mystr1; *mystr2 = mytest; mystr2++; mystr1++; } Вроде бы все учебнику…. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Ну да, весь код тут ошибка
mystr2 не имеет своего места в памяти, а мы ему присваиваем значение *mystr2 = *mystr1; Скажите, что именно Вы собираетесь делать? И пожалуйста, пользуйтесь тэгами [code=cpp] [/code] |
|||
|
||||
| alex22222 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.11.2004 Репутация: нет Всего: нет |
Я пытаюсь скопировать строку как указано в учебниках, а также в файле strcopy.c.
Указатель mystr2 задан в памяти, поэтому нет проблем записать по этому адресу символ. Например в strcopy.c. выполняется копирование так *mystr2++=*mystr++; Но у меня опять ошибка - Access Violation ! Ваше предложение относительно тэгов я не понял, я пока только учусь. С большим удовольствием приму любую помощь. |
|||
|
||||
| sergejzr |
|
||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Ок
Насколько я понимаю, желается следующее:
Вся конструкция однако заменяется (я бы так написал):
насчёт тэгов сверху есть кнопка КОД попробуйте вставить в свой пост: [code=cpp] #include "stdio.h" int main(){/*итд.*/} [/code] |
||||||
|
|||||||
| alex22222 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.11.2004 Репутация: нет Всего: нет |
Спасибо за хорошую вещь.
Однако у меня остается смутное впечатление, что все таки я далек от понимания. Я хочу написать код не пользуясь функциями типа strlen. Опять же в файле strlen.c используется операция *p1=*p2. Почему у меня это не работает? Относительно вставки [code=cpp] и т.д. то в какой файл это нужно добавить? Я создал простой проект в MS VC, диалоговое окно с кнопкой OnButtontest1. При нажатии на эту кнопку я пытаюсь выполнить код. Как в фале strcopy.c. Еше раз прошу за дремучесть, но уж больно это все интересно. |
|||
|
||||
| manu |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 14.10.2004 Репутация: 2 Всего: 3 |
Сам говорил и сам же ошибсяЖ)))
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Вставка [code] это в сообщение на форуме. Для того, чтобы код подсвечивался.
А насчёт без strlen так это надо просто mystr2 памяти сразу побольше дать и 3-ий вариант использовать
Нет нет, абсолютно ничего страшного PS: manu, спасибо |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
А как все таки использовать тело функции strcopy or strrev напрямую, как это делается в файлах strcopy.с or strrev.с. Почему код типа *p2=*p1 не выполняется у меня.
char* mystr1; char* mystr2; mystr1 = "mytest"; mystr2 = "notest"; while(*mystr2++=*mystr1++); тут опять ошибка - Access Violation ! Что не правильно? |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
переключись в релиз версию
|
||||
|
|||||
| Гость_alex22222 |
|
|||
|
Unregistered |
Не работает!
|
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
По вопросу.
-------------------------------------------- Кстати while(*mystr2++=*mystr1++); Это bel_nikita написал первым (не хочу плагиатить И ещё кстати, bel_nikita, опять ты с константными строками балуешься Как же релиз потом дебагить? Добавлено @ 00:20 Вот это вставьте в функцию и всё будет прекрасно работать
|
||||
|
|||||
| bel_nikita |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Guest
Последуйте совету sergej.z, заверните свой код в функцию. Вот, 100% рабочий пример:
|
||||||
|
|||||||
| alex22222 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 21.11.2004 Репутация: нет Всего: нет |
Уважаемые специалисты!
Прошу прощения за дремучесть еще раз. Проблема вот в чем. Я создаю проект в MS VC++, диалоговое окно, с кнопкой Buttontest1. затем я беру тело функции strcopy, please look at source strcopy.c. затем я пытаюсь выполнить код void CTestLearnDlg::OnButtontest1() { char* mystr1; char* mystr2; mystr1 = "mytest"; mystr2 = "notest"; while(*mystr2++=*mystr1++); } Все инициализировано! Однако ошибка - Access Violation ! Я не хочу использовать стандартные функции типа strlen. Я просто повторяю код из функции strcopy! тут нет функции типа main() {} ЭТО MFC! |
|||
|
||||
| sergejzr |
|
||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Разве в стандартной strcpy такое есть?
Это не важно
Вот рабочий вариант ------------------------- bel_nikita да я имею ввиду, что в дебаге с таким извращением работать невозможно. То, что скомпиленая верся "пропускает" кучу ошибок я не спорю |
||||||
|
|||||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
alex22222
Это сообщение отредактировал(а) bel_nikita - 22.11.2004, 01:04 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |