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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
#1

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

28.03.2013, 21:31. Просмотров 1062. Ответов 14
Метки нет (Все метки)

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 же выходит ошибка.
Помогите разобраться!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2013, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Своя реализация strcpy - не пойму где ошибка! (C++):

Как работает strcpy(), где ошибка - C++
Всем привет) Писал задачу, которая из 10 строк выводит самое короткое и первое в алфавитном порядке. Не понимаю почему не работает...

Не пойму, где ошибка - C++
Здравствуйте, что-то никак не разберусь в этом куске кода, и почему компилятор нашел там narrowing conversion во второй фигурной скобке...

Не пойму где ошибка - C++
Помогите исправить код, ошибок он не выдает, но программа почему то не работает, после вводы данных ничего не происходит, ниже условие и...

Не пойму, где ошибка - C++
Всем добрый день. Недавно начал изучать С++ вот столкнулся с проблемой в одной из задач: Из матрицы размером NxM получить вектор B,...

Не пойму где ошибка - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale(0, &quot;&quot;); double a, b; char f; a = 0; f = &quot;+&quot;; ...

Не пойму где ошибка - C++
Всем привет, вот решил написать простенький класс для работы с интернетом и выскакивают какие-то ошибки, не пойму в чем дело, вот эти...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
28.03.2013, 21:42 #2
C++
1
2
3
for (int i=0; i<l2  ;i++) {
    *(p+i) = *(q+i);
    i++;
и там плюс плюс и тут плюс плюс...
по коду - мешанина С++ и С, strcpy - сишная функция там exception'ов нету
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
28.03.2013, 23:12  [ТС] #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++;
    }
 
}
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.03.2013, 23:16 #4
C++
1
int l2 = strlen(q) + 1;
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
28.03.2013, 23:18 #5
C++
1
2
3
4
void strcpy(char* c_str1,char* c_str2)
{
    while(*c_str2++=*c_str1++);
}
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
28.03.2013, 23:19 #6
реализация strcpy уже давно баян.Что может быть проще, чем:
C++
1
while(*src++=*dst++);
Что? В реализации автора, например, есть Аж ДВА лишних цикла!
Где? А как, по-твоему, strlen реализован? Он именно что устраивает цикл по всей строке, пока не встретит нулевой символ. Зачем нужен этот цикл?

Добавлено через 35 секунд
ой, опоздал с примером
0
Байт
Эксперт C
16062 / 10331 / 1540
Регистрация: 24.12.2010
Сообщений: 19,468
28.03.2013, 23:23 #7
Цитата Сообщение от _Ант_ Посмотреть сообщение
где Сдесь ошибка
Одна из ошибок - тебе уже сказали, два плюса.
Вторая. Старайся не использовать идентификаторы типа l2. Букву латинскую "l'' отличить от "1" не просто.
3. Покажи место, где вызывается твоя copy. Кто такие в самом деле p и q.
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
28.03.2013, 23:53  [ТС] #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 цикле выдается
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 00:02 #9
???
Цитата Сообщение от Байт Посмотреть сообщение
3. Покажи место, где вызывается твоя copy. Кто такие в самом деле p и q.
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
29.03.2013, 14:30  [ТС] #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);
0
Байт
Эксперт C
16062 / 10331 / 1540
Регистрация: 24.12.2010
Сообщений: 19,468
29.03.2013, 14:41 #11
C
1
2
char *s1 = "111";
char* s2 ="222";
Замени на
C
1
2
char s1[4], s2[4]; 
strcpy(s1, "111"); strcpy(s2, "222");
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 19:03 #12
Цитата Сообщение от _Ант_ Посмотреть сообщение
Ошибка сдесь *(p+i) = *(q+i);
Строковому литералу что-то присвоить хочешь, отсюда и ошибка.
1
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
29.03.2013, 20:00 #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);
вчера разве не всё объяснили?
0
_Ант_
-113 / 1 / 0
Регистрация: 18.10.2012
Сообщений: 30
01.04.2013, 18:32  [ТС] #14
Спасибо, товарищи!! Я понял, огромное спасибо!
А тебе, Friday, спасибо в кавычках, за твой полезнейший коммент...
0
Friday
ну и долго меня небыло...
61 / 57 / 8
Регистрация: 24.03.2013
Сообщений: 173
01.04.2013, 19:10 #15
Цитата Сообщение от _Ант_ Посмотреть сообщение
Спасибо, товарищи!! Я понял, огромное спасибо!
А тебе, Friday, спасибо в кавычках, за твой полезнейший коммент...
ну бро, извеняй что хотел помочь, так что ли?)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 19:10
Привет! Вот еще темы с ответами:

Не пойму где ошибка в коде - C++
Задача: (В задаче можно использовать только такие библиотеки и решить надо только через условные операторы.) Все проходит и решение...

STL stack, не пойму где ошибка - C++
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;string&gt; #include &lt;sstream&gt; using namespace std; bool isOperator(const string&amp;...

Простой консольный калькулятор - не пойму, где ошибка - C++
#include &lt;stdio.h&gt; int main() { float num1,num2,res,moreCalc; char operation; ...

Операции с массивами (есть логическая ошибка, не пойму где) - C++
Программа компилируется нормально. Спрашивает кол-во элементов массива. Вводятся элементы массива Считает сумму от первого до...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.04.2013, 19:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru