Yes, you can't take c_str and show it with routines that don't use const parameters, can you.
Are they library functions or your own functions. If they are your own functions you should be able to pass it by reference or pointer and deal with it from there. If they are library functions which require (char *), you might be better off using c style strings or copying the string to a char * before passing it.
An alternative is to make your own string class which uses char * as it's underlying storage and have a function similar to c_str that returns a reference to it's own storage. This could probably be seen as unsafe though, as private variables are only supposed to be modified by the classes member functions. Honestly I don't even know 100% if this is possible, just an idea.
Another alternative still, if the function that takes char * is part of a library you are using, you could make a copy of the header file and change it to use std::string instead. You could probably accomplish most of the work with a find and replace feature
Ok, I have one last idea. You can probably modify std::string itself by adding a function which returns a char *. It would probably be as simple as copy and paste c_str() with some slight modifications. I imagine it probably typecasts it to const before returning it, as it's not const internally. It's probably a matter of removing the typecast.
Just found this through google
void g (const char& c)
{
val = f(const_cast<char&>(c));
}
It appeared to work for the person who posted the thread. But someone warns not to use it unless you are absolutely sure it will not be altered on the other end or it could cause a fault. This probably goes for the method of altering the string class as well