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

Реализация функции srcat. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
23.01.2011, 21:13     Реализация функции srcat. #1
Я написал (реализовал) функцию strcat.
Вот ...
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
31
32
33
34
35
36
37
38
39
40
41
42
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
/// РЕАЛИЗАЦИЯ ФУНКЦИИ strcat
 
    char s[]="Hello";
    char a[]="World!";
    int k=0;
    int l=0;
    int w;
    k=sizeof(s);
    l=sizeof(a);
    w=k+l;
    s[w];
    for (int i=0,r=0;i<w,r<k;i++,r++)
    
    {
        
        s[i]=s[r];
        if (s[r]==0)
        {
            s[i]=' ';
            i++;
            for (int d=0;d<l;d++)
            {   
                s[i]=a[d];
                if (s[i]==0)
                    break;
                else
                    i++;
            }
 
        }
    }   
    for (int i=0;i<w;i++)
    {cout <<s[i];}
return 0;
}
Но при запуске все выводит как надо, но потом возникает какая-то ошибка.
Сама компиляция идет.
Что в коде не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2011, 21:13     Реализация функции srcat.
Посмотрите здесь:

C++ Реализация функции принтф
C++ Собственная реализация функции конкатенации
C++ реализация ThreadSafe функции
C++ Реализация функции erase()
Реализация функции wait C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
archinko
13 / 13 / 2
Регистрация: 02.03.2010
Сообщений: 29
23.01.2011, 22:51     Реализация функции srcat. #2
Вот прототип функции strcat: char* strcat(char* dest; char* src). Нужно делать функцию на указателях, а здесь используються чаровые-масивы или const char*. На этом куске кода:
C++
1
2
3
4
5
6
7
8
  for (int d=0;d<l;d++)
                        {       
                                s[i]=a[d];
                                if (s[i]==0)
                                        break;
                                else
                                        i++;
                        }
масив s[] уже вышел за свои пределы(его размер 6), и все что этот кусок кода пытаеться ему присвоить улетает в далекие дали. Нужно создать отдельный указатель на char, выделить для него столько памяти, что бы хватило на оба слова + 1 символ конца строки. Ну и инициализирвоать его этими словами + не забыть поставить в конце '\0'.
schdub
23.01.2011, 22:57
  #3

Не по теме:

Цитата Сообщение от KOPC1886 Посмотреть сообщение
C
1
s[w];
А какую смысловую нагрузку несет 19-я строка?

archinko
13 / 13 / 2
Регистрация: 02.03.2010
Сообщений: 29
23.01.2011, 23:04     Реализация функции srcat. #4
Это ,наверное, была попытка выделить память для обоих строк
schdub
 Аватар для schdub
2903 / 1247 / 223
Регистрация: 19.01.2009
Сообщений: 3,219
Завершенные тесты: 1
23.01.2011, 23:07     Реализация функции srcat. #5
Каноническая реализация strcat, что-то типа:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
  * Copyright (c) 1988, 1993
  *      The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software
  *    must display the following acknowledgement:
  *      This product includes software developed by the University of
  *      California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/libkern/strcat.c,v 1.8 2003/02/10 00:36:27 hsu Exp $
  * $DragonFly: src/sys/libkern/strcat.c,v 1.5 2004/05/05 00:17:44 hsu Exp $
  */
 
char * strcat (char * s, const char * append)
{
    char *save = s;
    for (; *s; ++s);
    while ((*s++ = *append++) != 0);
    return(save);
}
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
25.01.2011, 17:48  [ТС]     Реализация функции srcat. #6
Эмммм.... а как тогда правильно?
Yandex
Объявления
25.01.2011, 17:48     Реализация функции srcat.
Ответ Создать тему
Опции темы

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