Artificial Intelligence
Зарегистрирован: 28.01.2006 Сообщения: 4
|
Добавлено: Сб Янв 28 2006 22:21 Заголовок сообщения: C++ помогите найти ошибку |
|
|
В функции delete_keword неработает одна строчка почему немогу понять, почему
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
//----------------------
void input_text(char *text);
int find(char *text, char *keyword, int keyword_length);
void delete_keyword(char *text, char *keyword, int keyword_length, char *text_after);
void out_text(char *text, char *text_after);
//----------------------
int main(void)
{
char *text,*text_after,keyword[81];
int count;
//-------------------------------------
printf("\nInput text, after press \"Enter\".\n");
input_text(text);
printf("\n%s\n",text);
printf("Input keyword(maximum 80 simbols).\n");
scanf("%s",keyword);
printf("Input count of keyword.\n");
scanf("%d",&count);
//--------------------------------------
if(count==find(text,keyword,strlen(keyword)))
{
delete_keyword(text, keyword, strlen(keyword),text_after);
out_text(text,text_after);
}
else
{
printf("\nProgramm finish work.\n");
}
getch();
return 0;
}
//-------fuction------------
void input_text(char *text)
{
char temp;
int i=0;
while((temp=getche())!='\r')
{
text=(char*)realloc(text,(i+2)*sizeof(char));
text[i]=temp;
i++;
}
text[i]='\0';
}
int find(char *text, char *keyword, int keyword_legth)
{
int i,count=0;
for(i=0; text[i]!='\0'; i++) if(memcmp(text+i,keyword,keyword_legth) == 0) count++;
return count;
}
void delete_keyword(char *text, char *keyword, int keyword_length,char *text_after)
{
int index=0,i;
for(i=0;i<strlen(text); i++)
{
if(memcmp(text+i,keyword,keyword_length) == 0) i=i+keyword_length;
text_after=(char*)realloc(text_after,(index+2)*sizeof(char));
text_after[index]=text[i];//<--не работает
text_after[index+1]='\0';
index++;
}
}
void out_text(char *text, char *text_after)
{
printf("Text: %s\nText after: %s", text, text_after);
} |
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Пн Янв 30 2006 10:36 Заголовок сообщения: |
|
|
Есть угроза выхода за пределы массива, если ключевое слово в конце строки, недурно бы проверять после строки
Код: |
if(memcmp(text+i,keyword,keyword_length) == 0) i=i+keyword_length;
|
И так трахать realloc вовсе не культурно, почитайте его описание, и вы ужаснетесь сколько лишней работы будет делать ваш компьютер....
А что пишет? |
|
Artificial Intelligence
Зарегистрирован: 28.01.2006 Сообщения: 4
|
Добавлено: Пт Фев 03 2006 01:54 Заголовок сообщения: |
|
|
Я уже рахобрался с этой программой, все таки бажила процедура ввода текста хотя я и не понял почему, просто перепесал её только немного подругому, точнее описал это другими "словами", а на счет реаллока это не принципиально мне просто нужно было на скорую руку код написать |
|