NULL struct at end of declared array of structs

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • JennyWren
    New Member
    • Mar 2008
    • 1

    NULL struct at end of declared array of structs

    I have an array of structs which I will be going through one-by-one to search for a matching value. This array might have elements added and removed later, so I don't want to have to update a defined size for the array. What I'd like to do is put a NULL struct at the end so that the end can be detected.

    Here's some code:

    Code:
    typedef struct smfMolTrans {
      char molecule[SZFITSCARD]; /* molecule species */
      char transiti[SZFITSCARD]; /* transition */
      double freq;               /* frequency of transition */
    } molTrans;
    
    static molTrans *transitions[] = {
    {"SO", "4 5 - 3 4", 178605.403000},
    {"CH", "2 -1 3 3 - 2 1 2 2", 178875.247400},
    {"SiCC", "8 0 8 - 7 0 7", 179446.496000},
    /*.... a bunch more....*/
    };
    Then later I want to be able to do something like
    Code:
    while ( transitions[i] != NULL ) {
    /* check to see if the frequency matches, do some stuff... */
    }
    Basically I need to be able to know when to quit searching through the array. When I try putting a NULL at the end of the array:

    Code:
    static molTrans transitions[] = {
    {"SO", "4 5 - 3 4", 178605.403000},
    {"CH", "2 -1 3 3 - 2 1 2 2", 178875.247400},
    {"SiCC", "8 0 8 - 7 0 7", 179446.496000},
    /*.... a bunch more....*/
    NULL
    };
    I get "warning: initialization makes integer from pointer without a cast" (for the initialization of the array) and "error: invalid operands to binary !=" (for the while loop).

    Suggestions?
  • Laharl
    Recognized Expert Contributor
    • Sep 2007
    • 849

    #2
    One solution is to create a set of values (maybe "", "", and 0) and treat that as your NULL struct. Another is to use a linked list of structs rather than an array. You'd (probably) need another struct that has a moltrans as its data member, along with a pointer to the next node in the list.

    Comment

    • weaknessforcats
      Recognized Expert Expert
      • Mar 2007
      • 9214

      #3
      Originally posted by JennyWren
      This array might have elements added and removed later, so I don't want to have to update a defined size for the array.
      By definition an array has a fixed size.

      That means you have a variable for the number of elements. Use that variable to know when you are at the end of the array.

      Only a char array with a NULL gets special treatment as a "string".

      Are you using C++? You don't say, but if you are, the vector implements an elastic array that expands and contracts.

      Also, instead of an array, could you use a double-linked list?

      Comment

      Working...