You can do exactly what you've already done.
char str[6] = "SLEEP"; char* pointer = &(str[1]); printf("%s\n", pointer);
If you are using a std::string instead of a raw char buffer (like you should be), then under C++11 std::string is guaranteed to have contiguous storage (21.4.1/5) with an appended NUL terminator (21.4.7.1/1):
std::string str = "SLEEP"; const char* pointer = &str[1];
These guarantees are new to C++11 -- C++03 makes no such guarantees. However all implementations I'm aware of do in fact use contigious storage with an appended NUL terminator. They do this because c_str() is required to return a const pointer to a C-style string. If you want a solution that is guaranteed to be compliant in C++03, then std::vector makes the same contiguity guarantee, even in C++03, but of course there you must apply the NUL terminator on your own:
std::string load = "SLEEP"; vector <char> str; copy (load.begin(), load.end(), back_inserter (str)); load.push_back ('\0'); // Appended NUL terminator const char* pointer = &str [1];
But now we're talking about making copies, obviously.