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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 20:53   #1
FreeCat
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 16
По умолчанию Хочу понять в чем ошибка моего кода

Код:
#include<iostream>
#include<cstdlib>
#include<cstdio>

using namespace std;

int main(int nNumberofArgs, char* pszArgs[])
{
 char* szWord="abcde";
 char* pszWord = szWord;
// objavliaju schetchik
 int i=0;
// Vyvod masiva dlia proverki
 while (*pszWord) {
 cout<<*pszWord<<" : "<<i<<endl;
 pszWord++;
// schitaju kolichestvo simvolov v stroke
 i++;
 }
// Rezultat podscheta
 cout<<i<<endl;
// vozvrat na 1 simvol
 pszWord--;
// oglashaju novyj ukazatel i initializiruju
 char* pszTemp=szWord;
//Ishodia iz myslej chto v dannyj moment ispolnenia koda
//ukazatel pszWord nahoditsia na 4 poziciji masiva, a pszTemp na 0
// delaju perestanovku simvolov v obratnom poriadke
 for (int j=0; j<i; j++){
 cout<<*pszTemp<<" : "<<*pszWord<<endl;
// zdes voznikajet oshybka...
 *pszTemp=*pszWord;
 pszTemp++;
 pszWord--;
 }
// proverka rezultata
 cout<<pszTemp;
system ("PAUSE");
return 0;
}
Више код моей проги с использованием указателей для перестановки символов в строке "abcdef" в обратном порядке.
Компилится в Дев С++, во время выполнения выдает ошыбку... Помогите пожулуйста понять где я неправильно мыслю. Я не прошу оптимизировать код или менять алгоритм... я уверен что есть лучший способ решения этой задачи. Но для меня важно почему именно здесь ошибка. Спасибо.

Последний раз редактировалось ACE Valery; 04.06.2012 в 23:29.
FreeCat вне форума Ответить с цитированием
Старый 06.06.2012, 00:50   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Пришлите текст ошибки
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 06.06.2012, 01:07   #3
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

вот так должно быть..
Код:
 // delaju perestanovku simvolov v obratnom poriadke
 for(int j=0; j<i; j++){
	cout<<*pszTemp<<" : "<<*pszWord<<endl;
	// zdes voznikajet oshybka...

	pszTemp=pszWord;

	pszTemp++;
	pszWord--;
 }
почему ошибка выходит, объяснить не могу..
но смысл в том, что указатель указателю надо присваивать вот так:
Код:
pszTemp=pszWord;
а не:
Код:
*pszTemp=*pszWord;
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 06.06.2012, 01:31   #4
FreeCat
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 16
По умолчанию

Извините... у меня укр винда ... перевод в гугл.
Подпись проблемы:
Имя события проблемы: APPCRASH
Имя приложения: перестановкаPointer.exe
Версия применения: 0.0.0.0
Метка времени приложения: 4fce78a7
Имя аварийного модуля: перестановкаPointer.exe
Версия аварийного модуля: 0.0.0.0
Временная метка аварийного модуля: 4fce78a7
Код исключения: c0000005
Смещение исключения: 000014b9
Версия ОС: 6.1.7600.2.0.0.256.1
Код локализации: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789

Ознакомьтесь с нашей декларацией о конфиденциальности в Интернете:
http://go.microsoft.com/fwlink/?link...8&clcid=0x0422

Если онлайновая заявление о конфиденциальности недоступна, ознакомьтесь с нашей офлайновом декларацией о конфиденциальности:
C: \ Windows \ system32 \ uk-UA \ erofflps.txt


не знаю иль поможет...
****
pszTemp=pszWord; - хмм...
пример в учебнике:
Код:
function swap(int *a , int *b);
 {
  int temp;
  temp = *a;
  *a   = *b;
  *b   = temp;
 }
Что-то я запутался...

Последний раз редактировалось Stilet; 06.06.2012 в 07:45.
FreeCat вне форума Ответить с цитированием
Старый 06.06.2012, 08:18   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может стоит не морокать помидорки и сделать так:
Код:
 for (int j=0; j<i/2; j++){
   cout<<*pszWord<<'\t'<<*pszTemp<<'\n';
   pszTemp++;pszWord--;
 }
?

P.S. Кстати мне тоже интересно почему в этом примере нельзя писать по указателям...
I'm learning to live...

Последний раз редактировалось Stilet; 06.06.2012 в 08:22.
Stilet вне форума Ответить с цитированием
Старый 06.06.2012, 09:50   #6
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Цитата:
пример в учебнике:
Код:


function swap(int *a , int *b);
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}

Что-то я запутался...
у меня вообще это не компилится.
компилю в Visual Studio 2008.

а вот так копмпилится:
Код:
Код:
void swap(int *a , int *b)
{
	int temp;
	temp = *a;
	*a   = *b;
	*b   = temp;
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 06.06.2012, 12:27   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
char* szWord="abcde";
Наверное потому, что нехорошо преобразовывать const char* в просто char*.
Somebody вне форума Ответить с цитированием
Старый 06.06.2012, 14:07   #8
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Код:
char* szWord="abcde";
Наверное потому, что нехорошо преобразовывать const char* в просто char*.
в смысле?
объясните пожалуйста.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 06.06.2012, 17:56   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас указатель на неизменяемые данные, а вы пытаетесь их изменить.

Somebody, ну там не константный указатель, а указатель на константные данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.06.2012, 18:14   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Подозревал но до конца не догадался что дело с константой идет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять в чем ошибка 6002theJuicy Visual C++ 4 23.05.2012 15:19
Си. Не могу понять в чем ошибка Gerbera Помощь студентам 2 12.07.2011 19:11
Не могу понять в чем ошибка.... Blonde Помощь студентам 0 21.05.2011 14:19
Не могу понять, в чем ошибка FlashProStar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.12.2010 12:20
Ч чём ошибка моего кода сохранения и загрузки? AngelOfDeath Общие вопросы Delphi 3 08.04.2008 13:55