Avoid using sprintf, aside from its unsafety it triggers ld(1)
warnings leading to broken feature detection when linking test
programs with libestdc++.

Index: libstdc++-v3/src/c++17/floating_to_chars.cc
--- libstdc++-v3/src/c++17/floating_to_chars.cc.orig
+++ libstdc++-v3/src/c++17/floating_to_chars.cc
@@ -879,7 +879,8 @@ namespace
 #pragma GCC diagnostic ignored "-Wabi"
   template<typename T, typename... Extra>
   inline int
-  sprintf_ld(char* buffer, const char* format_string, T value, Extra... args)
+  sprintf_ld(char* buffer, size_t length __attribute__((unused)),
+             const char* format_string, T value, Extra... args)
   {
     int len;
 
@@ -894,7 +895,7 @@ namespace
       len = __sprintfieee128(buffer, format_string, args..., value);
     else
 #endif
-    len = sprintf(buffer, format_string, args..., value);
+    len = snprintf(buffer, length, format_string, args..., value);
 
 #if _GLIBCXX_USE_C99_FENV_TR1 && defined(FE_TONEAREST)
     if (saved_rounding_mode != FE_TONEAREST)
@@ -1040,7 +1041,7 @@ template<typename T>
 	    // digit, and carefully compute and write the last digit
 	    // ourselves.
 	    char buffer[expected_output_length+1];
-	    const int output_length = sprintf_ld(buffer, "%.0Lf", value);
+	    const int output_length = sprintf_ld(buffer, sizeof(buffer), "%.0Lf", value);
 	    __glibcxx_assert(output_length == expected_output_length);
 	    memcpy(first, buffer, output_length);
 	    return {first + output_length, errc{}};
@@ -1227,7 +1228,7 @@ template<typename T>
 	// Do the sprintf into the local buffer.
 	char buffer[output_length_upper_bound+1];
 	int output_length
-	  = sprintf_ld(buffer, output_specifier, value, effective_precision);
+	  = sprintf_ld(buffer, sizeof(buffer), output_specifier, value, effective_precision);
 	__glibcxx_assert(output_length <= output_length_upper_bound);
 
 	if (effective_precision > 0)
