Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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) );
Прога компилица и запускается нормально, но при выполнении даёт "Ошибка по адресу...."
В чём может быть проблема? |
|
Вернуться к началу |
|
|
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. |
|
Вернуться к началу |
|
|
|