Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как правильно возвратить строку

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
alesha



Зарегистрирован: 12.11.2004
Сообщения: 159

СообщениеДобавлено: Вт Ноя 22 2005 17:54    Заголовок сообщения: Как правильно возвратить строку Ответить с цитатой

Есть вот такое определение фукции

char TFormMain::StrNcopy(char *str, int SourceN, int DestN){

char *str1;
for(int j = SourceN; j <= DestN ; j++ )
{ str1[j - SourceN] = str[j]; }
return *str1;
}

есть вот такой вызов
fprintf (out, "%s", StrNcopy(str, 2, 22) );

Прога компилица и запускается нормально, но при выполнении даёт "Ошибка по адресу...."

В чём может быть проблема?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
kolobok0



Зарегистрирован: 22.04.2005
Сообщения: 253
Откуда: Мсква

СообщениеДобавлено: Пт Дек 02 2005 14:38    Заголовок сообщения: Re: Как правильно возвратить строку Ответить с цитатой

alesha писал(а):
Есть вот такое определение фукции

char TFormMain::StrNcopy(char *str, int SourceN, int DestN){

char *str1;
for(int j = SourceN; j <= DestN ; j++ )
{ str1[j - SourceN] = str[j]; }
return *str1;
}

есть вот такой вызов
fprintf (out, "%s", StrNcopy(str, 2, 22) );

Прога компилица и запускается нормально, но при выполнении даёт "Ошибка по адресу...."

В чём может быть проблема?


строчка str1[j - SourceN] енто как будет работать при первом проходе ? У Вас же указатель на чар str1 НЕ определён...ну и соответственно от балды куда то пишите....

либо проинициализировать указатель (и кстати он, при таком коде должен указывать на достаточный буфер для приёма исходной строки). Я так понимаю код был стибрен не до конца откуда то... либо скомпилирован под Ваши нужды из других кусочков...


удачи Вам
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVES



Зарегистрирован: 12.09.2004
Сообщения: 132
Откуда: С-Петербург

СообщениеДобавлено: Пт Дек 02 2005 17:49    Заголовок сообщения: Ответить с цитатой

Мало того что память выделить забыли(не забудте ее потом вернуть),
так вы еще и возвращаете значение 0-ого символа!

Т.к. вопрос был о строке, то
Код:
char * F(...)
{
char *str1;
str1=new char[...];
.......
return str1;
}

_________________
Ошибки в программах - есть следствие ошибок в ДНК


Последний раз редактировалось: AVES (Сб Дек 03 2005 01:52), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Пт Дек 02 2005 22:38    Заголовок сообщения: Re: Как правильно возвратить строку Ответить с цитатой

Код:
char TFormMain::StrNcopy(char *str, int SourceN, int DestN){
 return strncat("", str + SourceN, DestN - SourceN)
}
Гхм?
_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AVES



Зарегистрирован: 12.09.2004
Сообщения: 132
Откуда: С-Петербург

СообщениеДобавлено: Сб Дек 03 2005 01:50    Заголовок сообщения: Ответить с цитатой

Цитата:
Код:
char TFormMain::StrNcopy(char *str, int SourceN, int DestN){
return strncat("", str + SourceN, DestN - SourceN)
}


Обратите внимание на заголовок ф-ции!!!
Возвращать надЫ указатель!
char TFormMain::StrNcopy(char *str, int SourceN, int DestN)
=>
char* TFormMain::StrNcopy(char *str, int SourceN, int DestN)
_________________
Ошибки в программах - есть следствие ошибок в ДНК
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Aragaer



Зарегистрирован: 28.03.2005
Сообщения: 164

СообщениеДобавлено: Сб Дек 03 2005 20:06    Заголовок сообщения: Ответить с цитатой

Действительно. Не посмотрев, скопировал объявление функции из первого поста... Правда я обычно ставлю звездочку не возле типа возвращаемого значения, а возле имени подпрограммы:
Код:
char *TFormMain::StrNcopy(char *str, int SourceN, int DestN)

_________________
Open your eyes.
And Awaken.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...