String array() in C

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • JackYee123@gmail.com

    String array() in C

    Hey,

    I need a structure to store a string array in c, for example

    Index Content
    -------- -----------
    0 word1
    1 word2
    2
    3
    4
    5

  • JackYee123@gmail.com

    #2
    Re: String array() in C

    Here is the compelte message

    Hi,

    I need a structure to store a string array in c, for example

    Index Content
    -------- -----------
    0 word1
    1 word2
    2 word3
    3 word4
    4 word5
    5 word6
    --------------------

    I was thinking to use char**, but I don't want to use double pointer,
    if there an easy way to get around this?

    Thanks.



    Comment

    • Malcolm McLean

      #3
      Re: String array() in C


      <JackYee123@gma il.comwrote in message
      news:1178559115 .488340.85250@h 2g2000hsg.googl egroups.com...
      Here is the compelte message
      >
      Hi,
      >
      I need a structure to store a string array in c, for example
      >
      Index Content
      -------- -----------
      0 word1
      1 word2
      2 word3
      3 word4
      4 word5
      5 word6
      --------------------
      >
      I was thinking to use char**, but I don't want to use double pointer,
      if there an easy way to get around this?
      >
      No. You can declare an array of pointers, but really the array is just a
      char ** dressed up with different syntax.
      If don't know how many string you need at run time

      char **list;
      int N;

      and malloc() is the way to go.
      If you do

      char *list[N];

      is OK.

      However you very rarely need raw tables of strings. Usually the string is
      tied to something. So
      struct mydata
      {
      char *word;
      int value;
      double value2;
      };

      where value and value2 are arbitrary things, eg counts, associated with each
      "word", is more common.
      --
      Free games and programming goodies.


      Comment

      • Default User

        #4
        Re: String array() in C

        JackYee123@gmai l.com wrote:
        Here is the compelte message
        >
        Hi,
        >
        I need a structure to store a string array in c, for example
        >
        Index Content
        -------- -----------
        0 word1
        1 word2
        2 word3
        3 word4
        4 word5
        5 word6
        --------------------
        >
        I was thinking to use char**, but I don't want to use double pointer,
        if there an easy way to get around this?
        Is your number of strings fixed, or variable?




        Brian

        Comment

        • Eric Sosman

          #5
          Re: String array() in C

          JackYee123@gmai l.com wrote On 05/07/07 13:31,:
          Here is the compelte message
          >
          Hi,
          >
          I need a structure to store a string array in c, for example
          >
          Index Content
          -------- -----------
          0 word1
          1 word2
          2 word3
          3 word4
          4 word5
          5 word6
          --------------------
          >
          I was thinking to use char**, but I don't want to use double pointer,
          if there an easy way to get around this?
          There are several approaches with different advantages
          and disadvantages. You haven't specified your needs very
          precisely, so I'll just sketch out a few methods. Note that
          these are NOT equivalent!


          /* Fixed-length array of fixed-length words (any
          * short words are followed by extra '\0' bytes
          * to a total size of six). Array elements are
          * modifiable, but no word can grow beyond five
          * payload characters.
          */
          char words[][5+1] = { "word1", ..., "word6", };


          /* Fixed-length array of pointers to words of
          * arbitrary length. The pointers can be changed
          * to point at different words, but the original
          * word data cannot be changes.
          */
          char *words[] = { "word1", ..., "word6", };


          /* Fixed-length array of pointers to words of
          * arbitrary length. Both the pointers and the
          * words can be changed, but the original words
          * cannot be lengthened in place.
          */
          char word1[] = "word1";
          ...
          char word6[] = "word6";
          char *words[] = { word1, ..., word6, };


          /* Dynamically allocated "array" of fixed-length
          * words. Array elements are modifiable, but the
          * words themselves cannot be lengthened. The
          * typedef is for clarity, and can be eliminated.
          */
          typedef char Word[5+1];
          Word *words = malloc(N * sizeof *words);
          if (words != NULL) {
          strcpy (words[0], "word1");
          ...
          strcpy (words[5], "word6");
          }


          /* Dynamically-allocated "array" of pointers to
          * dynamically-allocated words. Everything is
          * modifiable, replaceable, extensible, all-
          * singing, all-dancing, and carbon-neutral.
          */
          char **words = malloc(N * sizeof *words);
          if (words != NULL) {
          words[0] = malloc(sizeof "word1");
          if (words[0] != NULL)
          strcpy (words[0], "word1");
          ...
          /* A different way to calculate the size: */
          words[5] = malloc(strlen(" word6") + 1);
          if (words[5] != NULL)
          strcpy (words[5], "word6");
          }

          --
          Eric.Sosman@sun .com

          Comment

          • Martin Ambuhl

            #6
            Re: String array() in C

            JackYee123@gmai l.com wrote:
            Hey,
            >
            I need a structure to store a string array in c, for example
            >
            Index Content
            -------- -----------
            0 word1
            1 word2
            2
            3
            4
            5
            >
            char array_of_string s[6][6] = {"word1", "word2"}; /* in your restricted
            chase. The strings are modifiable. */

            char *array_of_strin gs[] = {"word1", "word2"}; /* More generally, but
            the strings must be copied elsewhere if you want to use modified forms
            of them, although the pointers can be modified. */

            char *array_of_strin gs[6] = {"word1", "word2"}; /* If you must have six
            strings, and string literals are not a problem. */

            Comment

            • Martin Ambuhl

              #7
              Re: String array() in C

              Malcolm McLean wrote:
              >
              <JackYee123@gma il.comwrote in message
              news:1178559115 .488340.85250@h 2g2000hsg.googl egroups.com...
              [...]
              >I was thinking to use char**, but I don't want to use double pointer,
              >if there an easy way to get around this?
              >>
              No. You can declare an array of pointers, but really the array is just a
              char ** dressed up with different syntax.
              This is wrong. Malcolm has been around long enough to know that a
              pointer is not an array, and a pointer to a pointer is not the same as
              an array of pointers. And he has been around long enough to know that
              lying to seekers after knowledge is not welcome here.

              Comment

              • Richard

                #8
                Re: String array() in C

                Martin Ambuhl <mambuhl@earthl ink.netwrites:
                JackYee123@gmai l.com wrote:
                >Hey,
                >>
                >I need a structure to store a string array in c, for example
                >>
                >Index Content
                >-------- -----------
                >0 word1
                >1 word2
                >2
                >3
                >4
                >5
                >>
                >
                char array_of_string s[6][6] = {"word1", "word2"}; /* in your
                restricted chase. The strings are modifiable. */
                That is disgusting code.
                >
                char *array_of_strin gs[] = {"word1", "word2"}; /* More generally, but
                the strings must be copied elsewhere if you want to use modified forms
                of them, although the pointers can be modified. */
                Which pointers? No "pointers" can be modified.
                >
                char *array_of_strin gs[6] = {"word1", "word2"}; /* If you must have
                six strings, and string literals are not a problem. */
                >
                Misleading. If you are going to use "six" then specify all the strings.


                --

                Comment

                • Jens Thoms Toerring

                  #9
                  Re: String array() in C

                  Richard <rgrdev@gmail.c omwrote:
                  Martin Ambuhl <mambuhl@earthl ink.netwrites:
                  JackYee123@gmai l.com wrote:
                  I need a structure to store a string array in c, for example
                  >
                  Index Content
                  -------- -----------
                  0 word1
                  1 word2
                  2
                  3
                  4
                  5
                  >
                  char array_of_string s[6][6] = {"word1", "word2"}; /* in your
                  restricted chase. The strings are modifiable. */
                  That is disgusting code.
                  Why? Perhaps an array of 6 strings, each long enough to hold 6 chars
                  is exactly what the OP needs. The problem is that underspecified that
                  this could be just the correct solution. But since that's not clear,
                  Mr. Ambuhl continued with:
                  char *array_of_strin gs[] = {"word1", "word2"}; /* More generally, but
                  the strings must be copied elsewhere if you want to use modified forms
                  of them, although the pointers can be modified. */
                  Which pointers? No "pointers" can be modified.
                  What are you talking about?
                  char *array_of_strin gs[] = {"word1", "word2"};
                  defines an array of two pointers to char arrays and those pointers
                  can be modified, i.e. made to point to other strings (or char
                  arrays to be precise).
                  char *array_of_strin gs[6] = {"word1", "word2"}; /* If you must have
                  six strings, and string literals are not a problem. */
                  Misleading. If you are going to use "six" then specify all the strings.
                  Which would you use, going by what the OP wrote? Invent some?

                  Regards, Jens
                  --
                  \ Jens Thoms Toerring ___ jt@toerring.de
                  \______________ ____________ http://toerring.de

                  Comment

                  • Old Wolf

                    #10
                    Re: String array() in C

                    On May 8, 7:31 am, Martin Ambuhl <mamb...@earthl ink.netwrote:
                    Malcolm McLean wrote:
                    [rubbish confusing arrays and pointers]
                    >
                    This is wrong. Malcolm has been around long enough to know that a
                    pointer is not an array, and a pointer to a pointer is not the same as
                    an array of pointers. And he has been around long enough to know that
                    lying to seekers after knowledge is not welcome here.
                    Are you sure he is lying? Perhaps he is just mistaken. With the
                    the number of wrong posts he makes each day (even more than
                    I do!), it would be quite a tour-de-force of trollage.

                    Comment

                    • Richard Tobin

                      #11
                      Re: String array() in C

                      In article <5a9jl5F2nr4cpU 1@mid.uni-berlin.de>,
                      Jens Thoms Toerring <jt@toerring.de wrote:
                      char *array_of_strin gs[6] = {"word1", "word2"}; /* If you must have
                      six strings, and string literals are not a problem. */
                      >
                      >Misleading. If you are going to use "six" then specify all the strings.
                      >
                      >Which would you use, going by what the OP wrote? Invent some?
                      It appears that the OP inadvertently sent the article before he finished
                      it. He followed up with a complete version that included six strings.

                      -- Richard
                      --
                      "Considerat ion shall be given to the need for as many as 32 characters
                      in some alphabets" - X3.4, 1963.

                      Comment

                      • Martin Ambuhl

                        #12
                        Re: String array() in C

                        Richard wrote:
                        Martin Ambuhl <mambuhl@earthl ink.netwrites:
                        >
                        >JackYee123@gmai l.com wrote:
                        >>Hey,
                        >>>
                        >>I need a structure to store a string array in c, for example
                        >>>
                        >>Index Content
                        >>-------- -----------
                        >>0 word1
                        >>1 word2
                        >>2
                        >>3
                        >>4
                        >>5
                        >>>
                        >char array_of_string s[6][6] = {"word1", "word2"}; /* in your
                        >restricted chase. The strings are modifiable. */
                        >
                        That is disgusting code.
                        Perhaps you could explain what aesthetic criterion leads you to such an
                        idiosyncratic claim.
                        >char *array_of_strin gs[] = {"word1", "word2"}; /* More generally, but
                        >the strings must be copied elsewhere if you want to use modified forms
                        >of them, although the pointers can be modified. */
                        >
                        Which pointers? No "pointers" can be modified.
                        array_of_string s is an array of pointer, all of which can be modified.
                        Perhaps you could explain what strange language standard leads you to
                        such an idiosyncratic claim.

                        >
                        >char *array_of_strin gs[6] = {"word1", "word2"}; /* If you must have
                        >six strings, and string literals are not a problem. */
                        >>
                        >
                        Misleading. If you are going to use "six" then specify all the strings.
                        If you knew your ass from a whole in the ground, you would know
                        a) the initialization is complete and
                        b) contains all the information in the original poster's message. To
                        pretend that one "knows" what the other strings are is a misleading
                        claim of mind-reading; to pretend that the initialization requires 6
                        explict initialisers is misleading and untrue.

                        Perhaps you could explain what leads you to such an absurd and
                        idiosyncratic claim.

                        Comment

                        • Joe Wright

                          #13
                          Re: String array() in C

                          Old Wolf wrote:
                          On May 8, 7:31 am, Martin Ambuhl <mamb...@earthl ink.netwrote:
                          >Malcolm McLean wrote:
                          >>[rubbish confusing arrays and pointers]
                          >This is wrong. Malcolm has been around long enough to know that a
                          >pointer is not an array, and a pointer to a pointer is not the same as
                          >an array of pointers. And he has been around long enough to know that
                          >lying to seekers after knowledge is not welcome here.
                          >
                          Are you sure he is lying? Perhaps he is just mistaken. With the
                          the number of wrong posts he makes each day (even more than
                          I do!), it would be quite a tour-de-force of trollage.
                          >
                          I think you're on to something here Wolf. :-)

                          --
                          Joe Wright
                          "Everything should be made as simple as possible, but not simpler."
                          --- Albert Einstein ---

                          Comment

                          Working...