Удалить из текста слова короче четырех символов - C (СИ)
Формулировка задачи:
Выполняю задание - удалить из текста слова короче 4-х символов, а слова длиннее 7-ми заменить на введенное слово. И у меня вылазит access violation. Подскажите что не так.
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#define MAXLINE 86
#define MAXSTR 15
char* getline()
{
int i=0;
char line[MAXLINE];
while ((line[i]=getchar())!='\n')
{
i++;
}
line[i]='\0';
return &line[0];
}
int main(void)
{
int i=0,lg[16],j=0,i2=0;
char txt[MAXSTR][MAXLINE],sep[6],s[MAXSTR][MAXLINE];
char *word;
char slovo[MAXLINE];
puts("Enter array of separators: \n");
scanf("%s",sep);
puts("Enter text: \n");
while(i<MAXSTR)
{
scanf("%s",txt[i]);
i2=0;
j=strlen(txt[i]);
while(j>0)
{
s[i][i2]=txt[i][j-1];
i2=i2+1;
j=j-1;
}
s[i][i2]='\0';
if (strlen(txt[i])==strlen(txt[i-1]))
{
if (strcmp(strtok(s[i],sep),strtok(s[i-1],sep))==0)
{break;}
}
i=i+1;
};
for (i=0;i<MAXSTR;i++)
{
j=0;
word=(char*)malloc(MAXLINE*MAXLINE*sizeof(char));//выделяю память
memset(word,0,sizeof(word));//очищаю буффер
word=strtok(txt[i],sep);//разбиваю на слова
do
{
j=j+1;
*(word+j)=*strtok('\0',sep);
} while(word[j]);
memset(txt[i],0,sizeof(txt[i]));//очищаю строку в тексте, что-бы записать туда изменённый текст
for(j=0;j<MAXLINE;j++)//записываю изменённый текст
{
if (strlen(word+j)>7)//замена на введённое слово
{
*txt[i]=*slovo;
}
if (strlen(word+j)>=4)//игнорирование слов короче 4 символо
{
strcat(txt[i],(word+j));
}
}
}
free(word);
getch();
return 0;
}Решение задачи: «Удалить из текста слова короче четырех символов»
textual
Листинг программы
static char line[BUFSIZ];
Объяснение кода листинга программы
- В первой строке объявлена статическая переменная типа char с именем
lineи размером BUFSIZ, который обычно равен 1024. - В данной переменной предполагается хранить текст, который необходимо обработать.