Kopiowanie stringow

0

Witam,

chce napisać program, który odwraca tablice dowolnego typu. Niestety program wywala się przy linijce
strcpy(tmp, t1); //

 
#include <stdio.h>
#include <stdlib.h> //malloc free
#include <string.h>



void mySwap(char t1, char t2, int roz)
{
char *tmp = (char *) malloc(roz+1);
    strcpy(tmp, t1);
    //strcpy(t1, t2);
    //strcpy(t2, t1);
}


//tab - adres poczatku tablicy
//rozmiar - ilosc elementow tablicy
//krok -rozmiar pojedynczego elementu
void odwrocTablice(void *tab, const int rozmiar,const int krok)
{
int wielkoscTablicy = rozmiar * krok; //wielkosc tablicy w bajtach
char *tablica =(char*) malloc(wielkoscTablicy);
int i; //iterator petli

    bcopy(tab, tablica, wielkoscTablicy);
    for(i = 0; i < (rozmiar / 2) ; ++i)
    {
        mySwap(tablica[i], tablica[rozmiar - 1 - i], rozmiar);
    }

free(tablica);
}


int main()
{
int tab[] = {3, 4, 5, 6};
    odwrocTablice(tab, 4, sizeof(int));
    printf("0 = %d, 1 = %d", tab[0], tab[1]);
}

0

Co to ma w ogóle być?
Co ma robić funkcja mySwap?

0

Skoro chcesz zamieniać elementy tablicy dowolnego typu, to:

  1. Kopiowanie stringów nie ma tu nic do rzeczy - chyba pomyliłaś strcpy z memcpy:
void mySwap(void *t1, void *t2, int roz)
{
    void *tmp = malloc(roz);
    memcpy(tmp, t1, roz);
    memcpy(t1, t2, roz);
    memcpy(t2, tmp, roz);
    free(tmp);
}
  1. W wywołaniu trzeba podać:
  • adresy elementów, a nie ich wartości
  • rozmiar pojedynczego elementu (krok), a nie ich liczbę
  1. Po co tworzysz kopię tablicy, którą poźniej niszczysz zostawiając oryginał bez zmian?
char *tablica =(char*) malloc(wielkoscTablicy);
bcopy(tab, tablica, wielkoscTablicy);

A jeśli robisz to celowo, to nie rzutuj na char i nie używaj jakiegoś bcopy.

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