Arytmetyka wskaźników - własne strcpy

0

Witam,

mam do napisania własną funkcję strcpy bez użycia string.h. Poniżej umieszczam kod (na razie początek), którym chcę znaleźć rozmiar str1, żeby móc zaalokować odpowiednią liczbę miejsc na znaki w str2. Nie wiem dlaczego, ale nie działa inkrementacja wskaźnika (zamiast przechodzić na następny znak w stringu, przechodzi na następny w ascii względem pierwszego w stringu). [???]

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

void cpy(char* str1, char* str2)
{
     int rozmiar = 0;
     //while(*str1!='\0') {
                         printf("\n%c",&(*str1)); 
       *str1++;
       printf("\n%c",&(*str1)); 
       rozmiar++;
     //}
     //str2=(char*) malloc (rozmiar*sizeof(char));
     printf("\nRozmiar: %d",rozmiar);

 }
char*string1;
char*string2;
int main()
{
    scanf("%s",& string1);
    printf("%s",& string1);
    cpy(string1,string2);

getch();

}

A include math.h to do dalszej części kodu będzie.

Dzięki od razu za wskazanie, jaka może być przyczyna błędu.

0

zacznijmy od tego ze nie masz zaalokowanej pamieci na stringa..

char *string1;
scanf("%s",& string1);

pomijając zle uzycie scanfa - do czego chcesz wczytac stringa? string1 jest samym wskaznikiem bez zaalokowanej pamieci

poprawnie:

char string1[100];
scanf("%s", string1);
0

Faktycznie :-) (tylko dziwne, że wypisywanie działa).

Ale w tym przypadku będzie na stałe przypisany rozmiar 100. A jak zrobić, żeby to było uniwersalnie napisane, żeby można było wczytać string dowolnej długości?

0
#include <stdio.h>

char* my_strcpy(char* dst,char* src){
  char* a=src;
  char* b=dst;
  do
    *(b++)=*a;
  while(*(a++));
  return dst;
}

char* my_strncpy(char* dst,char* src,int count){
  char* a=src;
  char* b=dst;
  if(count)
    do
      *(b++)=*a;
    while(*(a++)&& --count);
  return dst;
}

int main(){
  char a[128]="ala daje ciala";
  char b[128];
  printf("%s\n",my_strcpy(b,a));
  return 0;
}

co do dlugosci ciagu to musisz uzyc np. readline albo samemu wczytywac po znaku i odpowiednio przedluzac sobie bufor.

0

Wielkie dzięki [!!!] [browar]

Z buforem już sobie poradzę: zrobię wczytywanie znak po znaku i odkładanie na stos. Później wysokość stosu+1 to będzie nowy rozmiar stringa do którego będę kopiował... ;-)

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