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

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

Войти
Регистрация
Восстановить пароль
 
sikeman
Сообщений: n/a
#1

Помогите найти ошибку - C++

29.11.2008, 15:27. Просмотров 642. Ответов 2
Метки нет (Все метки)

Короче написал прогу, в которой вводится строка, и в ней надо заменить первое слово. Всё работает нормально но при выводе конечной строки на экран к ней добавляются непонятные символы, и я не могу никак понять в чём косяк. Ниже привожу код программы и картинку с изображением результата.
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>


class STRING
{
char *line;
int len;
public:
STRING();
STRING(char*);
STRING(const STRING &);
~STRING();
void print();
void input_string(char *);
void change();
};
STRING::STRING()
{
line=new char[256];
if(!line)
cout << "Memory error!" << endl;
for(int i=0;i<255;i++)
line[i]=0;
len=strlen(line);
cout<<"WORKING CONSTRUCTOR WITHOUT PARAMETERS"<<endl;
}
STRING::STRING(char *ln)
{
len = strlen(ln);
line=new char[len+1];
if(!line)
cout << "Memory error!" << endl;
strcpy(line,ln);
cout<<"WORKING CONSTRUCTOR WITH PARAMETERS"<<endl;
}
STRING::STRING(const STRING &obj)
{
len = obj.len;
line = new char [len + 1];
if(!line)
cout << "Memory error!" << endl;
strcmp(line, obj.line);
cout<<"Rabotaet konstruktor generator kopij"<<endl;

}
STRING::~STRING()
{
delete []line;
cout<<"WORKING DESTRUCTOR"<<endl;
}
void STRING::print()
{
cout<<line<<endl;
cout<<len<<endl;
}
void STRING::input_string(char * s)
{
delete []line;
len = strlen(s);
line = new char[len+1];
if(!line)
cout << "Memory error!" << endl;
strcpy(line, s);

}
void STRING::change()
{
int num = 0, tmp_len1, tmp_len2, k=0;
char ln1[80], *ln2, *ln3;
cout<<"Input word"<<endl;
cin>>ln1;
tmp_len1 = strlen(ln1);
while((line[k]!=' ') && (k<=len))
{
num=k;
k++;
}
ln2 = new char[len-num+1];
if(!ln2)
cout << "Memory error!" << endl;
for(int i=0;i<(len-num);i++)
ln2[i]=line[i+num+1];
tmp_len2 = strlen(ln2);
cout<<tmp_len2<<endl;
len = tmp_len1 + tmp_len2;
ln3 = new char[len+1];
if(!ln3)
cout << "Memory error!" << endl;
for(i=0; i<len; i++)
{
if(i<tmp_len1)
ln3[i] = ln1[i];
else
ln3[i] = ln2[i-tmp_len1];
}
delete []line;
line = new char[len+1];
if(!line)
cout << "Memory error!" << endl;
strcpy(line, ln3);
delete []ln2;
}
int main()
{
STRING ptr;
char tmp[256];
cout<<"enter"<<endl;
gets(tmp);
ptr.input_string(tmp);
ptr.print();
ptr.change();
ptr.print();
_getch();
return 0;
}
Помогите найти ошибку
Вложения
Тип файла: txt прога.txt (2.2 Кб, 21 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2008, 15:27     Помогите найти ошибку
Посмотрите здесь:

Помогите найти ошибку - C++
Помогите, с этим кодом неправильно..(( proizv красным почерком #include &lt;iostream&gt; using namespace std; int main() { int ...

Помогите найти ошибку - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main () {int i,j,s; int ** b=new int*(4) for (i=0;i&lt;4;i++) b=new int for...

Помогите найти ошибку - C++
Задача - вывести &quot;Yes&quot; если массив возрастающий, в противном случае вывести &quot;No&quot; В массиве n элементов, n вводится с клавиатуры int...

Помогите найти ошибку - C++
в чём здесь ошибка #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; int main() { clrscr(); ...

Помогите найти ошибку - C++
#include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include&lt;math.h&gt; ...

помогите найти ошибку - C++
#include &quot;../../header.h&quot; int main() { vector &lt;int&gt; nums(0); int num = 0; while (cin&gt;&gt;num, nums.size()&lt;2) ...

помогите найти ошибку - C++
#pragma argsused #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;math.h&gt; const float con={{1,1,2},{3,4,5},{6,7,8}}; class...

Помогите найти ошибку - C++
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; #include &quot;locale.h&quot; ...

Помогите найти ошибку. - C++
Задание с подпрограммой, которая упорно не хочет работать и я уже не знаю в чем ошибка.(Данные считываются из текстового файла) Даны...

Помогите найти ошибку - C++
//Даны три положительных числа а, b, c. Проверить, могут ли они быть длинами сторон треугольника. Если да, то вычислить площадь этого...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
29.11.2008, 18:25     Помогите найти ошибку #2
ппц... Ты при копировании, например (код не смотрел) забыл поставить НУЛЛ-символ конца строки!!!
sikeman
Сообщений: n/a
29.11.2008, 18:51     Помогите найти ошибку #3
StarWorm, спасибо, спасло добавление строки ln3[len+1]=NULL;
но спасла ещё изамена
Код
   for(i=0; i<len; i++)
    {
        if(i<tmp_len1)
            ln3[i] = ln1[i];
        else
            ln3[i] = ln2[i-tmp_len1];
    }
на
Код
    for(i=0; i<len; i++)
    {
        if(i<tmp_len1)
            strcpy(&ln3[i], &ln1[i]);
        else
            strcpy(&ln3[i], &ln2[i-tmp_len1]);
    }
Ответ Создать тему
Опции темы

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