diff --git a/Misc/ACKS b/Misc/ACKS
index 7796cdaff12ea7ac6b49fc7c6f2224ef16f8bd1a..66d340de168441a682ed071986c97ad7cbb156ac 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -692,6 +692,7 @@ Janne Karila
 Per Øyvind Karlsen
 Anton Kasyanov
 Lou Kates
+Makoto Kato
 Hiroaki Kawai
 Sebastien Keim
 Ryan Kelly
diff --git a/Misc/NEWS b/Misc/NEWS
index 6730e9faa74ffa34a221e409ce634a241cbb083d..b6e78894f3dbc99867769490f54c823b33eeab0f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #23338: Fixed formatting ctypes error messages on Cygwin.
+  Patch by Makoto Kato.
+
 - Issue #16840: Tkinter now supports 64-bit integers added in Tcl 8.4 and
   arbitrary precision integers added in Tcl 8.5.
 
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 14ec4ce60c3179911529a47aec18dc76657993c5..558abe398630fbd2603ca819b260fe8f0e6645f6 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -593,7 +593,7 @@ CDataType_in_dll(PyObject *type, PyObject *args)
 #ifdef __CYGWIN__
 /* dlerror() isn't very helpful on cygwin */
         PyErr_Format(PyExc_ValueError,
-                     "symbol '%s' not found (%s) ",
+                     "symbol '%s' not found",
                      name);
 #else
         PyErr_SetString(PyExc_ValueError, ctypes_dlerror());
@@ -3279,7 +3279,7 @@ PyCFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds)
 #ifdef __CYGWIN__
 /* dlerror() isn't very helpful on cygwin */
         PyErr_Format(PyExc_AttributeError,
-                     "function '%s' not found (%s) ",
+                     "function '%s' not found",
                      name);
 #else
         PyErr_SetString(PyExc_AttributeError, ctypes_dlerror());