diff --git a/vlib/v/gen/c/auto_str_methods.v b/vlib/v/gen/c/auto_str_methods.v index 6ed76e6485..fc481f1796 100644 --- a/vlib/v/gen/c/auto_str_methods.v +++ b/vlib/v/gen/c/auto_str_methods.v @@ -932,7 +932,7 @@ fn (mut g Gen) gen_str_for_struct(info ast.Struct, styp string, str_fn_name stri } else { // manage C charptr if field.typ in ast.charptr_types { - fn_body.write_string('tos2((byteptr)$func)') + fn_body.write_string('tos4((byteptr)$func)') } else { if field.typ.is_ptr() && sym.kind == .struct_ { funcprefix += '(indent_count > 25)? _SLIT("") : ' diff --git a/vlib/v/gen/js/auto_str_methods.v b/vlib/v/gen/js/auto_str_methods.v index e1903eac3e..7ea7078fbc 100644 --- a/vlib/v/gen/js/auto_str_methods.v +++ b/vlib/v/gen/js/auto_str_methods.v @@ -763,7 +763,7 @@ fn (mut g JsGen) gen_str_for_struct(info ast.Struct, styp string, str_fn_name st } else { // manage C charptr if field.typ in ast.charptr_types { - fn_builder.write_string('tos2((byteptr)$func)') + fn_builder.write_string('tos4((byteptr)$func)') } else { if field.typ.is_ptr() && sym.kind == .struct_ { fn_builder.write_string('(indent_count > 25)? new string("") : ') diff --git a/vlib/v/tests/str_gen_test.v b/vlib/v/tests/str_gen_test.v index e0452734f6..df195f9ec1 100644 --- a/vlib/v/tests/str_gen_test.v +++ b/vlib/v/tests/str_gen_test.v @@ -463,3 +463,14 @@ fn test_c_struct_typedef() { }' } } + +struct CharptrToStr { + cp charptr = charptr(0) +} + +fn test_charptr_nil_to_str() { + c := CharptrToStr{} + assert c.str() == r'CharptrToStr{ + cp: C"" +}' +}