Usuwanie elementu tablicy

0

Witam,
Mam problem z usuwaniem elementów tablicy, gdy przypisuję NULL do np 2 elementu tablicy wyskakuje mi warring: "assignment makes integer from pointer without a cast" nie wiem co robie źle, szukałem rozwiązania i nigdzie nic nie mogłem znaleźć.Nie wiem dlaczego nie mogę przypisać NULLa do tablicy aby ją usunąć. Mój kod programu:

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


int main(int argc, char *argv[]) 
{

char tab[6];
tab[2]='d';
tab[2]=NULL;
printf("%c",tab[2]);

return 0;
} 
1

Nie da się usunąć elementu ze środka tablicy, można go jedynie zastąpić. Powiedź lepiej co próbujesz osiągnąć (nie jak).

0

Mam pętle która się wykonuje np 5 razy , przy każdym przejściu pętli wypełniam tablice i kopiuje ja w inne miejsce,tylko jeśli napisy są różnej długości to kopiuje mi z pozostałościami ze wcześniejszego przebiegu pętli i chce zrobić tak żeby przy każdym przejściu tablica była pusta tak jak po zadeklarowaniu jej. Próbowałem zrobić coś takiego ale nie wiem czemu wyświetla mi "fgx" gdzie x to losowy znak.

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


int main(int argc, char *argv[]) 
{

char *tab=NULL;
tab = malloc(sizeof(*tab) * 5 );
tab[0]='f';
tab[1]='f';


printf("%s",tab);




return 0;
} 
1
#include <stdio.h>
#include <stdlib.h>
 
int main() 
  {
   char *tab=malloc(5*sizeof(char));
   tab[0]='A';
   tab[1]='l';
   tab[2]='a';
   tab[3]=0;
   printf("%s\n",tab);
   tab[0]='m';
   tab[1]='a';
   tab[2]=0;
   printf("%s\n",tab);
   tab[0]='k';
   tab[1]='o';
   tab[2]='t';
   tab[3]='a';
   tab[4]=0;
   printf("%s\n",tab);
   return 0;
  }
0

aha no tak :) zapomnialem o zerze które oznacza koniec tablicy, dzieki wielkie za pomoc.

1

Końca tablicy nie istnieje, mylisz z końcem napisu c-string.

0

Zastosowałem to co mi pokazałeś w moim projekcie i wszystko działa:), a to zero oznacza koniec tego napisu który wprowadziłem i później gdy wprowadzę następny to ten drugi zastąpi pierwszy dopiero wtedy gdy do tego drugiego dodam to zero tak? Przynajmniej ja to tak rozumiem z wyników jakie otrzymuję w tym programie.

 #include <stdio.h>
#include <stdlib.h>
 
int main() 
  {
   char *tab=malloc(5*sizeof(char));
   tab[0]='A';
   tab[1]='l';
   tab[2]='a';
   tab[3]='G';
   tab[4]=0;
   printf("%s\n",tab);
   printf("%s\n",tab);
   tab[0]='m';
   tab[1]=0;
   printf("%s\n",tab);
   tab[1]='a';
   tab[2]=0;
   printf("%s\n",tab);
   tab[0]='k';
   tab[1]='o';
   tab[2]='t';
   tab[3]='a';
   tab[4]=0;
   printf("%s\n",tab);
   return 0;
  } 
1

C-string kończy się znakiem o kodzie ASCII zero (pierwszym napotkanym jeżeli dla kogoś to nie jest oczywiste), koniec kropka.

0

No tak, tylko że np jest tablica 20 elementowa przypisze jej 10 znaków na końcu 0 i gdy chce je wypisać, wypiszą się te znaki, następnie przypisze jej 5 znaków na końcu dam 0, to wypiszą się tylko te znaki z drugiego przypisania. Moje pytanie:co się stało z tymi znakami 6-10 z pierwszego przypisania, bo nie bardzo rozumiem;/.

0

Nic z nimi się nie stało, nadal tam są:

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

int main() 
  {
   char str[]="Ala\0ma\0kota\0";
   for(char *p=str;*p;p+=strlen(p)+1) printf("<%s>\n",p);
   return 0;
  }

Proszę najechać na łapkę i uważnie przeczytać podpowiedź która się pojawi.

0

Chodzi mi o to że gdy mam:

 #include <stdio.h>
#include <stdlib.h>
 
int main() 
  {
   char *tab=malloc(5*sizeof(char));
   tab[0]='A';
   tab[1]='l';
   tab[2]='a';
   tab[3]='G';
   tab[4]=0;
   printf("%s\n",tab);
   tab[0]='m';
   tab[1]=0;
   printf("%s\n",tab);
   return 0;
  } 

za drugim razem "laG" się nie wypisuje, co się z nimi stało?Przecież nie zwalniam miejsc 1-3 ani nic z nimi nie robię.

2
#include <stdio.h>
#include <stdlib.h>
 
int main() 
  {
   char *tab=malloc(5*sizeof(char));
   tab[0]='A';
   tab[1]='l';
   tab[2]='a';
   tab[3]='G';
   tab[4]=0;
   printf("%s\n",tab);
   tab[0]='m';
   tab[1]=0;
   printf("%s\n",tab+2);
   return 0;
  } 
0

No teraz to dopiero do końca zrozumiałem jak to działa, wielkie dzięki za pomoc:)

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