Ĺadny brzuch
Witam!
Mam oto tablice 20 wskaźników do stringów
Gdy kopiuje wyraz z krótszej do dłuższej jest ok.
Jednak gdy probuje przekopiować z dłuższej do krótszej to po przekopiwanym wyrazie zostaja jakies smieci. Czy ktos mógłby sprawdzić gdzie popełniłem bład.
I czy w ogogle mozna kopiowac dłuższe znaki do krótszej.?
#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<iostream.h> char *dodaj(char *wsk); void zamiana (char *wsk1, char *wsk2); main() { char *tab[MAX]; int x,y,i=0; printf("Wprowadz linie nr:"); scanf("%d",&i); tab[i]=dodaj(tab[i]); printf("Podaj wiersz z ktorego chcesz kopiować: "); scanf("%d",&y); printf("I do ktorego chcesz kopiowac: "); scanf("%d",&x); zamiana(tab[x],tab[y]); return 0; } //--------zamiana------------ void zamiana(char *wsk1, char *wsk2) //wsk1=x , wsk2=y { int maks; if( ( strlen(wsk1) ) > ( strlen(wsk2) ) ) { maks=strlen(wsk1); } else { maks=strlen(wsk2); } for(int i=0;i<maks;i++) { (*(wsk1+i))=(*(wsk2+i)); } } //--------dodaje wiersz-------- char *dodaj(char *wsk) { wsk=new char[80]; printf("Podaj tekst: "); flushall(); gets(wsk); if(!wsk) { printf("brak pamieci"); } return wsk; }
Kopiując stringa mniejszego za większego dodawaj na końcu znak #0 :)
Zawsze możesz wykorzystać strcmp() / strncmp() do porównania plików i np. strcpy() do kopiowania :)
musze napisać niestety wlasna f-cje kopiującą. w sumie nie powinienem tez uzywac strlen ale i tak juz całosc programu jest za duza:)
Mozesz dokladniej sprecyzowac jak mam dodac do #0 bo nie bardzo wiem:/
I dlaczego moj warunek na if nie dziala:/
Użytkownik Crisu edytował ten post 27 listopad 2005, 00:02
Np.void copystr(char*zrodlo, char*cel) { for (int i=0; i<strlen(zrodlo); i++) cel[i] = zrodlo[i]; cel[strlen(zrodlo)] = 0; }
no faktycznie nie pomyslałem, dziala thx;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam oto tablice 20 wskaźników do stringów
Gdy kopiuje wyraz z krótszej do dłuższej jest ok.
Jednak gdy probuje przekopiować z dłuższej do krótszej to po przekopiwanym wyrazie zostaja jakies smieci. Czy ktos mógłby sprawdzić gdzie popełniłem bład.
I czy w ogogle mozna kopiowac dłuższe znaki do krótszej.?
#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<iostream.h> char *dodaj(char *wsk); void zamiana (char *wsk1, char *wsk2); main() { char *tab[MAX]; int x,y,i=0; printf("Wprowadz linie nr:"); scanf("%d",&i); tab[i]=dodaj(tab[i]); printf("Podaj wiersz z ktorego chcesz kopiować: "); scanf("%d",&y); printf("I do ktorego chcesz kopiowac: "); scanf("%d",&x); zamiana(tab[x],tab[y]); return 0; } //--------zamiana------------ void zamiana(char *wsk1, char *wsk2) //wsk1=x , wsk2=y { int maks; if( ( strlen(wsk1) ) > ( strlen(wsk2) ) ) { maks=strlen(wsk1); } else { maks=strlen(wsk2); } for(int i=0;i<maks;i++) { (*(wsk1+i))=(*(wsk2+i)); } } //--------dodaje wiersz-------- char *dodaj(char *wsk) { wsk=new char[80]; printf("Podaj tekst: "); flushall(); gets(wsk); if(!wsk) { printf("brak pamieci"); } return wsk; }
Kopiując stringa mniejszego za większego dodawaj na końcu znak #0 :)
Zawsze możesz wykorzystać strcmp() / strncmp() do porównania plików i np. strcpy() do kopiowania :)
musze napisać niestety wlasna f-cje kopiującą. w sumie nie powinienem tez uzywac strlen ale i tak juz całosc programu jest za duza:)
Mozesz dokladniej sprecyzowac jak mam dodac do #0 bo nie bardzo wiem:/
I dlaczego moj warunek na if nie dziala:/
Użytkownik Crisu edytował ten post 27 listopad 2005, 00:02
Np.void copystr(char*zrodlo, char*cel) { for (int i=0; i<strlen(zrodlo); i++) cel[i] = zrodlo[i]; cel[strlen(zrodlo)] = 0; }
no faktycznie nie pomyslałem, dziala thx;)