string::c.str() returns a string of type const char * as seen here
A quick fix: try casting printfunc(num,addr,(char *)data.str().c_str());
While the above may work, it is undefined behaviour, and unsafe.
Here's a nicer solution using templates:
char * my_argument = const_cast ( ...c_str() );