0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 83
1

Своя функция strcat. Копирует мусор

16.03.2015, 22:19. Показов 2387. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу как сделать так, что бы копирование происходило несколько раз.

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
44
45
46
char *Copies(const char *s, char *s1, int n)
{
    
    for (int i(0); i < n; i++)
    {
        char * p = s1;
        while (*p)
            ++p;
        while (*p++ = *s++);
        
    }
    return s1;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    char *s;
    char *s1;
    int dl,dl1;
    int n;
 
    cout << "Введите длинну первой строки" << endl;
    cin >> dl;
    s = (char*)malloc(dl* sizeof(char*)) + 1;
    cout << "Введите первую строку " << endl;
    cin >> s;
    
    cout << "Введите длинну второй строки" << endl;
    cin >> dl1;
    s1 = (char*)malloc(dl1* sizeof(char*)) + 1;
    cout << "Введите вторую строку ";
    cin >> s1;
    
    cout << "Введите сколько раз скопировать строку ";
    cin >> n;
    
    Copies(s, s1, n);
 
    cout << "Результат:  " << s1 << endl;
 
    _getch();
    return 0;
}

Своя функция strcat. Копирует мусор


Выводя "p" в этом цикле видно
Своя функция strcat. Копирует мусор
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2015, 22:19
Ответы с готовыми решениями:

Своя функция strcat, завершение с ошибкой
Здравствуйте, написал свою функцию strcat, она выполняет то, что от нее нужно, но сама программа...

функция strcat
Помогите разобраться, пожалуйста. char* resultat = 0; char* str = &quot;abc&quot;; strcat(resultat,...

Функция strcat
Нужно написать прогу на C++ и Ассемблере...функцмя strcat(на ассемблере сделал а вот на C++ не...

функция strcpy и strcat
Добрый день!У меня такая проблема...Есть массив строк, где хранятся имена и при выводе имени на...

6
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
16.03.2015, 22:29 2
Цитата Сообщение от str1py Посмотреть сообщение
while (*p++ = *s++);
строка 9, нужно наверно == , я исправил у меня работает, а там хз, может так и надо...
0
Модератор
Эксперт С++
13481 / 10738 / 6402
Регистрация: 18.12.2011
Сообщений: 28,650
16.03.2015, 22:42 3
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
#include <iostream>
#include <cstring>
using namespace std;
void Copies(const char *from, char *to, int n)
{
    to[0]=0; // делаем to  пустой строкой
    for (int i=0; i < n; i++)
        strcat(to,from);
}
int main()
{
    setlocale(LC_ALL, "Russian");
    
    cout << "Введите строку, которую надо копировать:" << endl;
    char s[100];cin.getline(s,100);
     
    cout << "Введите сколько раз скопировать строку ";
    int n;cin >> n;
    char* result=new char[strlen(s)*n+1];
    Copies(s, result, n);
    cout << "Результат:  " << result << endl;
    delete[] result;
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 83
16.03.2015, 22:48  [ТС] 4
У меня перестает копировать вообще

Добавлено через 26 секунд
zss, я не могу использовать встроенные функции
0
Модератор
Эксперт С++
13481 / 10738 / 6402
Регистрация: 18.12.2011
Сообщений: 28,650
16.03.2015, 23:04 5
Ну напишите свои.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int strlen(char* s)
{
    int i=0;
    while(s[i++])
       ;
   return i-1;
}
void strcat(char* to,char* from)
{
     char* p=to;
      while( *(p++) ) 
            ;
      p--;
      char* q=from;
      while( *q )
         *(p++)=*(q++);
         *p=0;
}
0
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 83
17.03.2015, 00:57  [ТС] 6
zss,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Mystrcat(char* to, char* from)
{
    char* p = to;
    while (*(p++));
    p--;
    char* q = from;
    while (*q)
        *(p++) = *(q++);
    *p = 0;
}
 
void Copies(char *from, char *to, int n)
{
    to[0] = 0; // делаем to  пустой строкой
    for (int i = 0; i < n; i++)
        Mystrcat(to,from);
}
Копирует первую строку в первую , а не во вторую
Своя функция strcat. Копирует мусор
0
Модератор
Эксперт С++
13481 / 10738 / 6402
Регистрация: 18.12.2011
Сообщений: 28,650
17.03.2015, 09:00 7
Лучший ответ Сообщение было отмечено str1py как решение

Решение

Программа размножает первую строку игнорируя содержимое второй.
Разве это не то, что Вам надо было?
Если результат размножения надо вставить после содержимого второй строки,
то уберите из кода
to[0] = 0; // делаем to пустой строкой

И зачем Вы запрашиваете длину вводимой строки?
В конце строки автоматически вставляется число ноль, его позиция и определяет длину:
C++
1
2
3
4
5
6
7
int strlen(char* s)
{
    int i=0;
    while(s[i++]!=0)
       ;
   return i-1;
}
1
17.03.2015, 09:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2015, 09:00
Помогаю со студенческими работами здесь

функция strcat
Добрый день!Помогите решить проблему...Пишу mp3 плеер.После запуска работает нормально, но после...

Не работает функция strcat
По каким то причинам не работает функция strcat strcat(PatchToFile, FILE_READ_ACCESS,...

Библиотека string.h, функция strcat
Написал вот такое, но в программе все равно текст не выводит. Должно работать точно также, как и...

Что делает функция strcat(t, f)
Функция strcat(t, f) что она делает и как применяеться?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru