Tricky Situation: Atof function converting strings to inf or nan
This blog post says about a tricky situation when using atof function. The atof function converts a string argument to a floating point number.
If the string to be converted starts with "inf" or "nan", the atof function converts the string to inf/nan instead of converting to 0.
inf represents "Positive Infinity" and nan represents a value which is "Not a Number".
For eg: The following strings will convert to inf when using atof function.
This issue can be corrected by using a simple which checks if the string starts with inf and if so, it can be programmed to prevent from passing to atof function and parse 0 instead.
On debugging, we can see that correct value of 0 is passed (as shown below)
Similar Posts:
1) Anonymous classes in C++
2) Program to check whether a system is big-endian or little-endian
If the string to be converted starts with "inf" or "nan", the atof function converts the string to inf/nan instead of converting to 0.
inf represents "Positive Infinity" and nan represents a value which is "Not a Number".
For eg: The following strings will convert to inf when using atof function.
- Information -> inf
- Infection -> inf
- Influenza -> inf
- etc...
The following strings will convert to nan when using atof function.
- Nanotechnology -> nan
- Nanogram -> nan
- etc...
This issue can cause downstream impacts if you are using the converted values to be saved to database or other application.
The following C++ program shows the above issue:
This issue can be corrected by using a simple which checks if the string starts with inf and if so, it can be programmed to prevent from passing to atof function and parse 0 instead.
The function looks like the below:
if (((word[0] == 'i') || (word[0] == 'I')) && ((word[1] == 'n') || (word[1] == 'N')) && ((word[2] == 'f') || (word[2] == 'F'))) { value1 = 0; } else { value1 = atof(word); }
On debugging, we can see that correct value of 0 is passed (as shown below)
Similar Posts:
1) Anonymous classes in C++
2) Program to check whether a system is big-endian or little-endian
Comments
Post a Comment