Access violation writing location. Wybranie wyrazów zaczynających się od a,A.

0

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;
}


0

Może ++nowylan = tekst+i ? Tak na szybko jakoś na to wpadłem nie wiem czy dobrze. Jeśli nie to mnie poprawcie

1 użytkowników online, w tym zalogowanych: 0, gości: 1