Własna funkcja strncpy oraz strstr C

0

Witam próbuje napisać własną funkcje http://pl.wikibooks.org/wiki/C/strncpy jednak popełniam jakiś błąd którego nie potrafię znaleźć.

#include<stdio.h>
#include<string.h>

char * strncpy1(char * target, const char * source ,int count);
int main(void)
{   
	char  pierwszy[40] = "Mam na imie Klaudiusz ";
	char  drugi[] ="i mam 20 lat";
    
	printf("Adres :%p" , pierwszy);
	strncpy1(pierwszy,drugi,40);
	puts(pierwszy);
	printf("Adres :%p" , pierwszy);

	
}
char * strncpy1(char * target, const char * source ,int count)
{
	char *wsk;
	wsk = target;  // zapamientuje adres pierwszego elementu target

	while(target)
		target++;  // jedzimy do konca pierwszego stringa

	while(count-- && *(source-1)) // dopuki spelniona podana ilosc znakow lub koniec zrodla
	{
		*target = *source;
		target++;
		source++;
		
	}

	

	return wsk;

}

Dodatkowo mam problem z funkcja http://cpp0x.pl/dokumentacja/standard-C/strstr/440

char * zawiera_lan(const * char pierwszy, const * char drugi)
{
	int count = 0;
	while(*pierwszy && count == strlen(drugi))
	{
		if(*pierwszy == *drugi)
			count++;
		else
			count = 0;

		pierwszy++;
		drugi++;
	}

	if( count == strlen(drugi) )  return --pierwszy - count;
	else return 0;
} 

Proszę o pomoc i pozdrawiam.

1

*target zamiast target i source zamiast source-1

1

Całkowicie zły algorytm. Nie możesz tracić drugiego stringa. W takim trywialnym rozwiązaniu problemu powinieneś dla każdego znaku w stringu pierwszy sprawdzić czy kolejne jego znaki razem z tym znakiem tworzą podciąg drugi. Myślę, że sensowne będzie użycie pętli for.

0

wersja nieczuła na wielkość liter:

char* stristr(const char *str1, const char *str2)
{
	const char *p1, *p2;
	char c = tolower(*str2);
	if (!c)
		return (char*)str1;
	for (; *str1; ++str1)
		if (tolower(*str1) == c)
		{
			for (p1=str1+1, p2=str2+1; *p1 && *p2; ++p1, ++p2)
				if (tolower(*p1) != tolower(*p2))
					break;
			if (!*p2)
				return (char*)str1;
		}
	return 0;
}

wersja standardowa po usunięciu wywołań tolower().

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