[ale] OT: c++ datatypes question
Fulton Green
ale at FultonGreen.com
Mon Jun 7 15:16:00 EDT 2004
On Mon, Jun 07, 2004 at 03:01:07PM -0400, J.M. Taylor wrote:
> Palm has a datatype WORD which is an unsigned, 16-bit int. I am trying to
> read in a delimited record from a text file into a buffer and assign
> what's in the buffer as the value of the variable in question (let's call
> it wVar). I cannot change the datatype of wVar. So, ignoring the mechanics
> of reading in the value, which works just fine, let's say the buffer I
> read into is called tmp.
>
> wVar = (unsigned short) atoi(tmp); (or, (unsigned __int16) atoi(tmp))
> compiles just fine but dies at runtime.
Since you're using C++, have you tried using the C++-style streaming
operators? For example,
#include <sstream>
// ...
std::istringstream iss(tmp, std::istringstream::in);
tmp >> wVar;
The atoi() function, as well as countless other C-style standard functions,
are considered "legacy" when used in a modern C++ (i.e., has a robust
Standard Template Library (STL)) development context.
> sprintf((char*)wVar,"%u",tmp);
> Compiles and doesn't crash at runtime, but I'm getting a zero value which
> isn't right. Setting the value staticly, like sprintf((char*)wVar,"2")
> gives me a zero value too.
This does the exact opposite of what you need. You'd want to try sscanf()
instead, but remember that these functions, like atoi(), are considered
"legacy" in a modern C++ context.
More information about the Ale
mailing list