Program raz na kilkadziesiąt uruchomień wydaje się działać. Niestety prawie zawsze wyskakuje mu błąd "access violation writing location" w linijce:
*(nowylan+l) = *(tekst+i);
lub
*(nowylan+l) = *(tekst+k);
Domyślam się że chodzi o coś z pamięcią ale pomysły mi się skończyły. Proszę o pomoc ale bez rewolucji w kodzie :)
//napisac sama funkcje ktora z lancucha zwraca lancuch z wyrazami zaczynajacymi sie na a lub A
//w zwracanym lancuchu miedzy wyrazami mialo dawac \n
#include <stdio.h>
#include <stdlib.h>
char *zwroca (char *tekst);
main()
{
char *lan;
char *lanzw;
lan=(char*)malloc(100*sizeof(char));
lanzw=(char*)malloc(100*sizeof(char));
printf("podaj lancuch");
fflush(stdin);
gets(lan);
lanzw=zwroca(lan);
puts(lanzw);
system("pause");
return 0;
}
char *zwroca (char *tekst)
{
int i=0,j=0,k=0,l=0;
char *nowylan;
nowylan=(char*)malloc(100*sizeof(char));
if((*(tekst+0)=='a')||(*(tekst+0)=='A'))
{
for(i=0; *(tekst+i)!=' '; i++)
{
//nowylan=(char*)realloc(nowylan,(l+2)*sizeof(char));
*(nowylan+l) = *(tekst+i);
l++;
}
}
for(j=i; *(tekst+j)!='\0'; j++)
{
if(*(tekst+j)==' ')
{
if((*(tekst+j+1)=='a')||(*(tekst+j+1)=='A'))
{
for(k=j+1; *(tekst+k)!=' '; k++)
{
//nowylan=(char*)realloc(nowylan,(l+2)*sizeof(char));
*(nowylan+l) = *(tekst+k);
l++;
}
*(nowylan+l)=' ';
l++;
}
}
}
return nowylan;
}