I think that you are overwriting memory somewhere. Notice that m never changes. Since you have an m++ statement, it should. Since it doesn't, it means that it is being stepped on by something else. That something else is most likely happening in your string parsing code.
There is no reason to save the string twice. First you collect all the data in a string. Then, you parse it, and save all the tokens in an array. Then, you convert some of the tokens in that array to floats. There are all kinds of possibilities for where you could be overwriting memory.
All of them could be eliminated by using strtok to do the parsing. It returns a pointer to a token, managing allocation of space to hold that token. Then, all you need to do is convert that token to a float, and store the float in the float array.
If you persist in writing your own parser, fine. But, I think you need to understand what you are doing a lot more than you do.
You have no error checking. A token could be 15 characters long, and you happily stuff than into an array that is sized to hold 11 or 13, counting the terminating NULL, which you never add.
Then, you call atof. The atof function expects its input to be a string. You are supplying an array of characters.
There is a subtle difference between a string and an array of characters. The difference is that a string is an array of characters that is NULL terminated.
I'll keep harping on this because it is so important. You can not expect reasonable results if you supply bad input. Google "GIGO". You're providing the first part, and getting the second part.
I am not sure when to terminate the character array entries./quote]
Then, you should be using a function or library that does.