Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision 421b242f35ca942dba1db8babe2feeca2745c455)
+++ libcfa/src/collections/string.cfa	(revision 1911f37cfdb2a7d266e1e37d20978e10e59f0f16)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Apr 13 07:58:55 2025
-// Update Count     : 390
+// Last Modified On : Mon Sep 15 10:26:35 2025
+// Update Count     : 394
 //
 
@@ -97,34 +97,4 @@
 }
 
-string str( ssize_t rhs ) {
-	string s = rhs;
-	return s;
-}
-
-string str( size_t rhs ) {
-	string s = rhs;
-	return s;
-}
-
-string str( double rhs ) {
-	string s = rhs;
-	return s;
-}
-
-string str( long double rhs ) {
-	string s = rhs;
-	return s;
-}
-
-string str( double _Complex rhs ) {
-	string s = rhs;
-	return s;
-}
-
-string str( long double _Complex rhs ) {
-	string s = rhs;
-	return s;
-}
-
 void ^?{}( string & s ) {
 	^(*s.inner){};
@@ -204,5 +174,24 @@
 
 ////////////////////////////////////////////////////////
-// Getter
+// C-style
+
+// safe conversion from string to char *
+char * strncpy( char * dst, string & src, size_t n ) {
+	size_t l = min( n - 1, len( src ) );				// ensure null terminated
+	for ( i; l ) dst[i] = src[i];
+	dst[l] = '\0';
+	return dst;
+}
+char * ?=?( char *& dst, string & src ) {
+	dst = aalloc( len( src ) + 1 );					// ensure null terminated
+	for ( i; len( src ) ) dst[i] = src[i];
+	dst[len(src)] = '\0';
+	return dst;
+}
+void ?{}( char *& dst, string & src ) {
+	dst = aalloc( len( src ) + 1 );					// ensure null terminated
+	for ( i; len( src ) ) dst[i] = src[i];
+	dst[len(src)] = '\0';
+}
 
 size_t strnlen( const string & s, size_t maxlen ) { return min( len( s ), maxlen ); }
@@ -255,7 +244,7 @@
 
 string ?()( string & s, ssize_t start, ssize_t len ) {
-	if ( start < 0 ) { start += len( s ); }
-	if ( len < 0 ) { len = -len; start -= len; }
-	if ( start >= len( s ) ) return (string){ "" };
+	if ( start < 0 ) start += len( s );
+	if ( len < 0 ) { len = -len; start -= len - 1; }
+	if ( start < 0 || start >= len( s ) ) return (string){ "" };
 	if ( start + len > len( s ) ) len = len( s ) - start;
 	string ret = { *s.inner, start, len };
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision 421b242f35ca942dba1db8babe2feeca2745c455)
+++ libcfa/src/collections/string.hfa	(revision 1911f37cfdb2a7d266e1e37d20978e10e59f0f16)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Sep  5 15:51:08 2025
-// Update Count     : 310
+// Last Modified On : Sun Sep 14 10:58:28 2025
+// Update Count     : 311
 //
 
@@ -43,11 +43,4 @@
 void ?{}( string & s, long double _Complex rhs );
 static inline void ?{}( string & s, int rhs ) { (s){(signed long int) rhs}; }
-
-// string str( ssize_t rhs );
-// string str( size_t rhs );
-// string str( double rhs );
-// string str( long double rhs );
-// string str( double _Complex rhs );
-// string str( long double _Complex rhs );
 
 PBOOST string & ?=?( string & s, string c );
@@ -68,4 +61,7 @@
 static inline string & strcpy( string & s, const string & c ) { s = c; return s; }
 static inline string & strncpy( string & s, const string & c, size_t n ) { assign( s, c, n ); return s; }
+char * strncpy( char * dst, string & src, size_t n );
+char * ?=?( char *& dst, string & src );
+void ?{}( char *& dst, string & src );
 
 // Alternate construction: request shared edits
