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

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

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

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

29.11.2008, 15:27. Просмотров 629. Ответов 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++ помогите найти ошибку
C++ помогите найти ошибку.
C++ Помогите найти ошибку
Помогите найти ошибку C++
C++ Помогите найти ошибку
помогите найти ошибку C++
Помогите найти ошибку C++
C++ Помогите найти ошибку
Помогите найти ошибку C++
ПОмогите найти ошибку C++
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]);
    }
Yandex
Объявления
29.11.2008, 18:51     Помогите найти ошибку
Ответ Создать тему
Опции темы

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