własna funkcja strcpy - nie działa na linuxie

0

Witam. Mam taki problem. Chciałem zaimplementować własną funkcję strcpy działającą na stringach. Nie wiem niestety co jest powodem wyrzucania "Segmentation fault" na linuxie. Pewnie znowu jakąś głupotę pisze, a nie jestem tego świadom. Z góry dziękuje za wskazanie błędu i dobre rady. Pozdrawiam

 #include <stdio.h>
char *moje_strcpy(char cel[], char zrodlo[]);

main()
{
    char *c;
    char tablica[200];

    scanf("%s", c);
    printf("%s", moje_strcpy(tablica, c));
    
    

}

char *moje_strcpy(char cel[], char zrodlo[])
{
int i = 0;
	while (zrodlo[i] != '\0')
	{
		cel[i] = zrodlo[i];
		i++;
	}
	cel[i] = '\0';
	return(cel);
}
0
    char *c; // c wskazuje na nieokreślony obszar pamięci 
    scanf("%s", c); // pod ten nieokreślony adres wpisujesz nieokreślonej długości ciąg znaków.

// należy użyć:
    char c[100];
    scanf("%99s",c);

// lub:
    char c[100];
    fgets(c,100,stdin); // uwaga w tablice "c" będzie również enter ('\n') jeżeli użytkownik wpisał mniej niż 99 znaków.
0
_13th_Dragon napisał(a)
    char *c; // c wskazuje na nieokreślony obszar pamięci 
    scanf("%s", c); // pod ten nieokreślony adres wpisujesz nieokreślonej długości ciąg znaków.

// należy użyć:
    char c[100];
    scanf("%99s",c);

// lub:
    char c[100];
    fgets(c,100,stdin); // uwaga w tablice "c" będzie również enter ('\n') jeżeli użytkownik wpisał mniej niż 99 znaków.

Dziękuje za szybką odpowiedź. Uporałem się z problemem i porzuciłem wskaźniki. Jednakże, czy mógłbyś mi powiedzieć jak przydzielic odpowiednio pamiec, zeby tablicy nie okreslac na poczatku i wpisac tam dowolnie dlugi ciag znakow? Probowalem czytajac rozne kursy ogarnac malloc etc. ale nic z tego...

0

Wczytujesz znak po znaku do Entera, lub innego przekazanego do funkcji znaku.
Lub też fragmentami za pomocą fgets().
Po drodze przydzielasz pamięć dla coraz większego ciągu.
Jako wynik zwracasz wskaźnik.

0
char *strcpy_moje(char *dst, char *src)
{
	char *a = src;
	while (*a++ != '\0')
		*dst++ = *src++;
	*dst-- = '\0';
	return dst;
}
0

Jeżeli już to:

char *strcpy_moje(char *dst,char *src)
  {
   char *ret;
   ret=dst;
   while((*(dst++)=*(src++))!=0) {}
   return ret;
  }

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