This code has worked for years in C51:
----- CmdParm[CmdCnt / 2] = strtod(ParamBuf, &rPos); // get a number // returns with rPos pointing to the next unconverted char in the ParamBuf if(rPos > ParamBuf) // if something was converted CmdCnt += 1; -----
I just copied it into a C166 program, and it fails to advance the "rPos" return pointer if the value it finds and converts is exactly zero. This happens even in the middle of a long string with non-zero values following the zero value. Increase the value to 0.0001 or 1 and the pointer is advanced.
It is reading ASCII zero characters, so it should be able to tell them apart from the '\0' terminator. C51 does it quite reliably.
Loren
View all questions in Keil forum