Форум программистов, компьютерный форум CyberForum.ru

Своя реализация strcpy - не пойму где ошибка! - C++

Восстановить пароль Регистрация
 
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
28.03.2013, 21:31     Своя реализация strcpy - не пойму где ошибка! #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
void copy(char *p, char *q) throw (char*)
{
    int l2 = strlen(q);
    //cout<<"strlen(q)="<<strlen(q)<<"  strlen(p)="<<strlen(p)<<endl;
    if (strlen(p)<l2) throw "exeption";
    
    for (int i=0; i<l2  ;i++) {
    *(p+i) = *(q+i);
    i++;
    }
 
}
Ошибка доступа в строке *(p+i) = *(q+i);
Для int точно такая же ф-я работает, с char же выходит ошибка.
Помогите разобраться!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
28.03.2013, 21:42     Своя реализация strcpy - не пойму где ошибка! #2
C++
1
2
3
for (int i=0; i<l2  ;i++) {
    *(p+i) = *(q+i);
    i++;
и там плюс плюс и тут плюс плюс...
по коду - мешанина С++ и С, strcpy - сишная функция там exception'ов нету
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
28.03.2013, 23:12  [ТС]     Своя реализация strcpy - не пойму где ошибка! #3
и там плюс плюс и тут плюс плюс...
по коду - мешанина С++ и С, strcpy - сишная функция там exception'ов нету
Знаю я про функцию, вопрос на собеседовании был - без использования сишной функции strcpy
написать ручками похожую...

Добавлено через 1 час 26 минут
Ребята, где сдесь ошибка, плиз нужна помощь!!
C++
1
2
3
4
5
6
7
8
9
10
11
12
void copy(char *p, char *q) throw (char*)
{
    int l2 = strlen(q);
    //cout<<"strlen(q)="<<strlen(q)<<"  strlen(p)="<<strlen(p)<<endl;
    if (strlen(p)<l2) throw "exeption";
    
    for (int i=0; i<l2  ;i++) {
    *(p+i) = *(q+i);
    i++;
    }
 
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.03.2013, 23:16     Своя реализация strcpy - не пойму где ошибка! #4
C++
1
int l2 = strlen(q) + 1;
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
28.03.2013, 23:18     Своя реализация strcpy - не пойму где ошибка! #5
C++
1
2
3
4
void strcpy(char* c_str1,char* c_str2)
{
    while(*c_str2++=*c_str1++);
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.03.2013, 23:19     Своя реализация strcpy - не пойму где ошибка! #6
реализация strcpy уже давно баян.Что может быть проще, чем:
C++
1
while(*src++=*dst++);
Что? В реализации автора, например, есть Аж ДВА лишних цикла!
Где? А как, по-твоему, strlen реализован? Он именно что устраивает цикл по всей строке, пока не встретит нулевой символ. Зачем нужен этот цикл?

Добавлено через 35 секунд
ой, опоздал с примером
Байт
 Аватар для Байт
14004 / 8835 / 1234
Регистрация: 24.12.2010
Сообщений: 16,014
28.03.2013, 23:23     Своя реализация strcpy - не пойму где ошибка! #7
Цитата Сообщение от _Ант_ Посмотреть сообщение
где Сдесь ошибка
Одна из ошибок - тебе уже сказали, два плюса.
Вторая. Старайся не использовать идентификаторы типа l2. Букву латинскую "l'' отличить от "1" не просто.
3. Покажи место, где вызывается твоя copy. Кто такие в самом деле p и q.
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
28.03.2013, 23:53  [ТС]     Своя реализация strcpy - не пойму где ошибка! #8
C++
1
2
3
4
void strcpy(char* c_str1,char* c_str2)
{
    while(*c_str2++=*c_str1++);
}
ОШИБКА Необработанное исключение в "0x00ee16d6" в "hjdfsbjtrre.exe": 0xC0000005: Нарушение прав доступа при записи "0x00ee7864"
Я про нее и спрашиваю.
Работаю в Visual Studio 10, в проге не новичек..
Но вот сдесь я просто в тупике...

Добавлено через 53 секунды
Ошибка в while цикле выдается
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 00:02     Своя реализация strcpy - не пойму где ошибка! #9
???
Цитата Сообщение от Байт Посмотреть сообщение
3. Покажи место, где вызывается твоя copy. Кто такие в самом деле p и q.
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
29.03.2013, 14:30  [ТС]     Своя реализация strcpy - не пойму где ошибка! #10
Вот собственно вся программа
C++
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
29
30
# include <iostream>
 
using namespace std;
 
void copy(char *p, char *q) throw (char*)
{
    int l2 = strlen(q);
    //cout<<"strlen(q)="<<strlen(q)<<"  strlen(p)="<<strlen(p)<<endl;
    if (strlen(p)<l2) throw "exeption";
    for (int i=0; i<l2  ;i++) {cout<<*(q+i)<<" ";}
    for (int i=0; i<l2  ;i++) {
    *(p+i) = *(q+i);
    i++;
    }
 
}
int main(){
    try{
    char *s1 = "111";
    char* s2 ="222";
    
    cout<<"s1="<<s1<< " |s2= " <<s2<<endl;
    copy(s1,s2);
    
    cout<<"s1="<<s1<< " |s2= " <<s2<<endl;
    }
    catch (char* ex) {cout<<"Fack yeah!\n";}
    system("PAUSE");
    return 0;
}
Ошибка сдесь *(p+i) = *(q+i);
Байт
 Аватар для Байт
14004 / 8835 / 1234
Регистрация: 24.12.2010
Сообщений: 16,014
29.03.2013, 14:41     Своя реализация strcpy - не пойму где ошибка! #11
C
1
2
char *s1 = "111";
char* s2 ="222";
Замени на
C
1
2
char s1[4], s2[4]; 
strcpy(s1, "111"); strcpy(s2, "222");
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 19:03     Своя реализация strcpy - не пойму где ошибка! #12
Цитата Сообщение от _Ант_ Посмотреть сообщение
Ошибка сдесь *(p+i) = *(q+i);
Строковому литералу что-то присвоить хочешь, отсюда и ошибка.
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
29.03.2013, 20:00     Своя реализация strcpy - не пойму где ошибка! #13
Цитата Сообщение от _Ант_ Посмотреть сообщение
Вот собственно вся программа
C++
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
29
30
# include <iostream>
 
using namespace std;
 
void copy(char *p, char *q) throw (char*)
{
    int l2 = strlen(q);
    //cout<<"strlen(q)="<<strlen(q)<<"  strlen(p)="<<strlen(p)<<endl;
    if (strlen(p)<l2) throw "exeption";
    for (int i=0; i<l2  ;i++) {cout<<*(q+i)<<" ";}
    for (int i=0; i<l2  ;i++) {
    *(p+i) = *(q+i);
    i++;
    }
 
}
int main(){
    try{
    char *s1 = "111";
    char* s2 ="222";
    
    cout<<"s1="<<s1<< " |s2= " <<s2<<endl;
    copy(s1,s2);
    
    cout<<"s1="<<s1<< " |s2= " <<s2<<endl;
    }
    catch (char* ex) {cout<<"Fack yeah!\n";}
    system("PAUSE");
    return 0;
}
Ошибка сдесь *(p+i) = *(q+i);
вчера разве не всё объяснили?
_Ант_
 Аватар для _Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
01.04.2013, 18:32  [ТС]     Своя реализация strcpy - не пойму где ошибка! #14
Спасибо, товарищи!! Я понял, огромное спасибо!
А тебе, Friday, спасибо в кавычках, за твой полезнейший коммент...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 19:10     Своя реализация strcpy - не пойму где ошибка!
Еще ссылки по теме:

Не пойму где ошибка C++
C++ STL stack, не пойму где ошибка
C++ Не пойму, где ошибка

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Friday
ну и долго меня небыло...
 Аватар для Friday
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
01.04.2013, 19:10     Своя реализация strcpy - не пойму где ошибка! #15
Цитата Сообщение от _Ант_ Посмотреть сообщение
Спасибо, товарищи!! Я понял, огромное спасибо!
А тебе, Friday, спасибо в кавычках, за твой полезнейший коммент...
ну бро, извеняй что хотел помочь, так что ли?)
Yandex
Объявления
01.04.2013, 19:10     Своя реализация strcpy - не пойму где ошибка!
Ответ Создать тему
Опции темы

Текущее время: 08:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru