 <p>There are two (or more) problems. The first: you are using <code>typedef</code> when you are trying to declare an array of structs. Don't. Instead of</p> <pre><code>typedef struct Symbles symbles_arr[MAX_SYMBOLS_ENTRIES_EXTERNALS]; </code></pre> <p>use</p> <pre><code>struct Symbles symbles_arr[MAX_SYMBOLS_ENTRIES_EXTERNALS]; </code></pre> <p>Notice that you now have the structure (not a pointer to the structure) - so when you want to access an element you need <code>.</code> not <code>-&gt;</code> Thus:</p> <pre><code> symbles_arr[symbol_counter]-&gt;symbolName=*toCheck; </code></pre> <p>needs to become</p> <pre><code> strcpy(symbles_arr[symbol_counter].symbolName, *toCheck); </code></pre> <p>because you allocated space for the symbol name in the structure, and you can't just take that pointer and point it somewhere else.</p> <p>Finally - you don't need to <code>malloc</code> space for <code>toCheck</code> since <code>strtok</code> actually returns a pointer to the original string (it doesn't make a copy). The side effect of this is that your input string (the one passed to <code>strtok</code>) becomes mangled in the process - after you're done using it, it has a lot of <code>'\0'</code> added.</p> <p>There may be other problems, but this should get you on your way...</p>