C strtod() Function | Convert String to Double with Error Checking

Introduction

The strtod() function in C is a standard library function that converts a string to a double. It is part of the C standard library (stdlib.h). This function is more versatile and robust than atof() because it allows for error checking and supports more complex input strings.

strtod() Function Syntax

The syntax for the strtod() function is as follows:

double strtod(const char *str, char **endptr);

Parameters:

  • str: A C string that contains the representation of a floating-point number.
  • endptr: A pointer to a character pointer. If endptr is not NULL, strtod() stores the address of the first invalid character in *endptr.

Returns:

  • The function returns the converted double value. If no valid conversion could be performed, it returns 0.0 and sets endptr to str.

Examples

Converting a Simple String to Double

To demonstrate how to use strtod() to convert a string to a double, we will write a simple program.

Example

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str = "123.456";
    char *endptr;
    double num;

    // Convert string to double
    num = strtod(str, &endptr);

    // Print the converted value
    printf("The converted value is: %f\n", num);

    // Print the remaining part of the string
    if (*endptr != '\0') {
        printf("Remaining part of the string: %s\n", endptr);
    }

    return 0;
}

Output:

The converted value is: 123.456000

Handling Invalid Input

This example shows how strtod() behaves with invalid input.

Example

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str = "abc123.456";
    char *endptr;
    double num;

    // Convert string to double
    num = strtod(str, &endptr);

    // Print the converted value
    printf("The converted value is: %f\n", num);

    // Print the remaining part of the string
    if (*endptr != '\0') {
        printf("Remaining part of the string: %s\n", endptr);
    }

    return 0;
}

Output:

The converted value is: 0.000000
Remaining part of the string: abc123.456

Real-World Use Case

Converting User Input to Double with Error Checking

In real-world applications, the strtod() function can be used to convert user input, provided as a string, into a double with proper error checking.

Example

#include <stdio.h>
#include <stdlib.h>

int main() {
    char input[100];
    char *endptr;
    double value;

    // Prompt the user for input
    printf("Enter a floating-point number: ");
    fgets(input, sizeof(input), stdin);

    // Convert input to double
    value = strtod(input, &endptr);

    // Check for errors
    if (endptr == input) {
        printf("No valid conversion could be performed.\n");
    } else {
        // Print the converted value
        printf("You entered: %f\n", value);

        // Print the remaining part of the string
        if (*endptr != '\0' && *endptr != '\n') {
            printf("Remaining part of the string: %s\n", endptr);
        }
    }

    return 0;
}

Output (example user input "45.67abc"):

Enter a floating-point number: 45.67abc
You entered: 45.670000
Remaining part of the string: abc

Conclusion

The strtod() function is used for converting strings to double values in C. It allows for precise and reliable conversion of numerical data stored as strings, with the added benefit of error handling and the ability to parse more complex input strings. Always handle invalid input scenarios to ensure robust applications.

Comments