c problem

Sekcia: Programovanie 08.04.2008 | 22:16
pison   Návštevník
mam taku otazku, ked mam retazec ulozeny v poli. chcem dat potom ten retazec jako premennu aby to bolo pole retazcov. napriklad: precitane pismeno som nacitaval do pole1. a teraz chcem pole1 dat do naproklad pole2[1] ako ho tam nakopirujem. ked to spravim cez strcpy(pole2[1],pole1) tak mi to tam nic neda.
    • Re: c problem 08.04.2008 | 23:19
      Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
      Naprikald takto:
      #include <stdio.h>
      #include <string.h>
      
      int main(void)
      {
        char pole1[100];
        char pole2[20][100];
      
        strcpy(pole1,"Ahoj, ako sa mas?");
        strcpy(pole2[0],pole1);
      
        strcpy(pole1,"Mam sa dobre.");
        strcpy(pole2[1],pole1);
      
        printf("%s\n%s\n",pole2[0],pole2[1]);
      
        return 0;
      }
      
      Musis to druhe pole definovat ako viacrozmerne, v tomto pripade dvojrozmerne. Dimenzie pritom idu od vonkajsej po vnutornu, cize pri retazovych operaciach sa bude pouzivat posledna dimenzia ako retazec.
      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
      • Re: c problem 09.04.2008 | 11:25
        pison   Návštevník
        a keby som chcel ten prvy rozmer alokovat dynamicky
        • Re: c problem 09.04.2008 | 11:59
          Avatar jv openSuSE 11  Používateľ
          Ktory je ten 'prvy' rozmer? Ta 100 alebo ta 20?
          • Re: c problem 09.04.2008 | 12:10
            pison   Návštevník
            ten 20
            • Re: c problem 09.04.2008 | 13:13
              Avatar uid0 Debian  Používateľ
              a chces tam mat tolko veeeeela poloziek? ze ci sa ti neoplati oba dynamicky alokovat :)

              pozri realloc()
              Debian. apt-get into it…
            • Re: c problem 09.04.2008 | 13:37
              Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
              char **pole;
              A mozes dynamicky alokovat oba :)
              Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
              • Re: c problem 09.04.2008 | 16:21
                pison   Návštevník
                na tom uz som rozmyslal , ale pre mna je to zbytocne dynamicky alokovat oba. no nevadi skusim
              • Re: c problem 09.04.2008 | 17:28
                pison   Návštevník
                skusam to takto
                char *pole=NULL;
                ....

                i++;
                pole=(char*)realloc(pole,i*sizeof(char*));
                pole[i]=malloc(MAXZNAK);

                ale vyhadzuje mi to segmentation fault
                • Re: c problem 09.04.2008 | 17:35
                  Avatar borg Fedora  Administrátor
                  man realloc
                  • Re: c problem 09.04.2008 | 18:28
                    pison   Návštevník
                    sak to tak mam ci nie
                    • Re: c problem 09.04.2008 | 18:48
                      Avatar borg Fedora  Administrátor
                      >pole[i]=malloc(MAXZNAK);

                      tu hladaj skodnu
                      • Re: c problem 09.04.2008 | 18:59
                        pison   Návštevník
                        a da sa to nejako odstranit bez toho aby som to musel prerabat na dvojrozmerne pole
          • Re: c problem 09.04.2008 | 21:37
            Avatar jv openSuSE 11  Používateľ
            #include <stdio.h>
            #include <string.h>

            typedef char POLEZNAKOV[100];

            int main(void)
            {
            POLEZNAKOV pole1;
            POLEZNAKOV *pole2;

            pole2=malloc(20,sizeof(POLEZNAKOV));
            strcpy(pole1,"Ahoj, ako sa mas?");

            strcpy(*pole2,pole1);

            strcpy(pole1,"Mam sa dobre.");
            strcpy(*(pole2+1),pole1);

            printf("%s\n%s\n",*pole2,*(pole2+1));

            return 0;
            }
            Bez testovania...
            • Re: c problem 09.04.2008 | 21:41
              Avatar borg Fedora  Administrátor
              a to je chyba, ze bez testovania
              • Re: c problem 09.04.2008 | 23:10
                Avatar jv openSuSE 11  Používateľ
                No hej, uz si aj vidim chybu.
                Mimochodom, BWPOW pouziva presne tie iste testovacie stringy ako ja... :)
    • Re: c problem 06.05.2008 | 01:32
      Avatar lacodomin RedHat,Fedora  Používateľ
      co tak pouzit char** pointer na pointer

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


      int main()
      {


      char** strings=NULL;
      char* ptr=NULL;

      ptr = (char*) malloc(20);
      strcpy(ptr,"String 1");

      strings = (char**) malloc(1*sizeof(char*));

      strings[0]=ptr;


      printf("strings[0]=%s\n",strings[0]);

      ptr = (char*) malloc(strlen("String 2")+1);
      strcpy(ptr,"String 2");


      strings = (char**) realloc(strings,2*sizeof(char*));

      strings[1]=ptr;


      printf("strings[0]=%s\n",strings[0]);
      printf("strings[1]=%s\n",strings[1]);

      return 0;


      }