Mam maly problem z ponizszym programem :P mianowicie nie wiem czemu nie dodaje mi nic do listy :/ ponadto przy kompilacji wywala kila warningow typu

warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[30]’

nie wiem gdzie popelniam blad:/ problem zapewne tkwi w funkcji dodaj

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

struct EListy {
  int  id;
  char imie[20];
  char nazwisko[30];
  char data[10];
  char miasto[20];
  int  nr_telefonu;
  struct EListy *next;
};

void dodaj(struct EListy *lista,  char imie_[20], char nazw_[30], char data_[10], char miasto_[20], int nr_tel_) 
{
  struct EListy *wsk, *nowy;
  wsk = lista;
  while (wsk->next != NULL)
    {
       wsk = wsk->next;   
    }
  nowy = (struct EListy*)malloc(sizeof(struct EListy));
  memcpy(nowy -> imie,imie_,20);
  memcpy(nowy -> nazwisko,nazw_,30);
  memcpy(nowy -> data,data_,10);
  memcpy(nowy -> miasto,miasto_,20);
  if (wsk==NULL) {
  nowy -> id          = 1;
  } else {
  nowy -> id          = wsk->id + 1;
  }
  nowy -> nr_telefonu = nr_tel_;
  nowy -> next        = NULL;
  wsk  -> next        = nowy;
}

void zapisz_do_pliku(struct EListy *lista)
{
  struct EListy *wsk;
  FILE *plik;
  plik = fopen("baza.txt","w");

  while (wsk->next != NULL)
    { 
      //zapis do pliku
      fprintf(plik,"%d %s %s %s %s %s %d", wsk->id, wsk->imie, wsk->nazwisko, wsk->data, wsk->miasto, wsk->nr_telefonu);
      wsk = wsk->next;
    }
}

void odczyt_z_pliku(struct EListy *lista)
{
  int id,nrtel;
  char imie,nazw,data,miasto;
  struct EListy *nowy, *wsk=lista;
  FILE *plik;
  plik = fopen("baza.txt","r");

  while (!EOF)
    { 
      //odczyt z pliku
      while (wsk->next != NULL)
       {
         wsk = wsk->next;   
       }
       nowy = malloc(sizeof(struct EListy));
       nowy -> next        = NULL;
       wsk  -> next        = nowy;
       fscanf(plik,"%d %s %s %s %s %d", wsk->id, wsk->imie, wsk->nazwisko, wsk->data, wsk->miasto, wsk->nr_telefonu);
       
    }
}

void wypisz_liste(struct EListy *lista)
{
  struct EListy *wsk = lista;
    while(wsk->next != NULL)
      { 
	    printf("ID: %d\n Imie: %s\n Nazwisko: %s\n Data ur: %s\n Miasto: %s\n Telefon: %d",wsk->id,wsk->imie,wsk->nazwisko,wsk->data,wsk->miasto,wsk->nr_telefonu);
 	    wsk = wsk->next;
      }
}

void usun_z_listy(struct EListy *lista, char naz[])
{
  struct EListy *wsk=lista;
  while (wsk->next != NULL)
    {
     if (wsk->next->nazwisko == naz)
       {
         struct EListy *UsuwanyE=wsk->next;
	     wsk->next = UsuwanyE->next;
	     free(UsuwanyE);
       } else
       {
         wsk = wsk->next;
       }
    }
}

void szukaj(struct EListy *lista, char naz[])
{
  struct EListy *wsk=lista;
  while(wsk->next != NULL)
      {
        if(wsk->nazwisko == naz) {
          printf("ID: %d\n Imie: %s\n Nazwisko: %s\n Data ur: %s\n Miasto: %s\n Telefon: %d", wsk->id, wsk->imie, wsk->nazwisko, wsk->data, wsk->miasto, wsk->nr_telefonu); 
          break;
        } else {
          wsk = wsk->next;
        }
      }
}

int main()
{ 
  struct EListy *NL;
  int a, tel;
  char imie[20],nazw[30],datau[10],miasto[20];
  NL = malloc(sizeof(struct EListy));
  odczyt_z_pliku(NL);
  do {
  printf("1. Dodaj do bazy\n2.Szukaj\n3. Usun\n4. Zapisz\n5. Wypisz\n6. Zakoncz\n\nCo chcesz zrobic:  ");
  scanf("%d", &a);
  
    switch (a) {
      case 1: 
        {
           printf("\nImie: ");
           scanf("%s", &imie);
           printf("\nNazwisko: ");
           scanf("%s", &nazw);
           printf("\nData Urodzenia (MM-DD-RRRR): ");
           scanf("%s", &datau);
           printf("\nMiasto: ");
           scanf("%s", &miasto);
           printf("\nTelefon: ");
           scanf("%d", &tel);
	   //printf("aasdf");
           dodaj(NL,imie,nazw,datau,miasto,tel);
	   //printf("1234567587765");
           break;
	}
      case 2: 
	{
           printf("\nPodaj nazwisko szukanej osoby: ");
           scanf("%s", &nazw);
           szukaj(NL,nazw);
           break;
	}
      case 3: 
	{
           printf("\nPodaj nazwisko osoby,ktora chcesz usunac: ");
           scanf("%s", &nazw);
           usun_z_listy(NL,nazw);
           break;
	}
      case 4: 
	{
           zapisz_do_pliku(NL);
           break;
	}
      case 5: 
	{
           wypisz_liste(NL);
           break;
	}
      case 6: 
	{
           zapisz_do_pliku(NL);
           break;
	}
      default:
	{
           zapisz_do_pliku(NL);
           break;  
	}
    }
  } while(a!=6);
  
}