I think you're missing the point here, the conversion function is trivially inlinable:
char* sds_cstr(sds *str){
return &str[0]; //you could probably just cast too
}
The other posters solution is actually not equivalent in this way (his sds is convertable to char* instead of sds*).