Вы можете делать то, что вы уже сделали.
char str[6] = "SLEEP";
char* pointer = &(str[1]);
printf("%s\n", pointer);
Если вы используете std::string
вместо сырого char
буфера (как вы должны быть), то при 11 std::string
С ++ гарантированно имеет непрерывное хранение (21.4.1/5) с добавленной NUL терминатор (21.4.7.1/1):
std::string str = "SLEEP";
const char* pointer = &str[1];
Эти гарантии являются новыми для C++ 11 - C++ 03 не дает таких гарантий. Однако все реализации, о которых я знаю, действительно используют условное хранилище с добавленным терминатором NUL. Они делают это, потому что c_str()
требуется для возврата указателя const
в строку стиля C. Если вы хотите, чтобы решение было совместимо с C++ 03, то std::vector
обеспечивает ту же гарантию совместимости даже в C++ 03, но, конечно же, вы должны применить один ограничитель NUL:
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];
Но теперь мы говорим о создании копий, очевидно.
Итак, C или C++? Выбери один. –
Используйте пару итераторов. – chris
std :: string str ("SLEEP"); char * pointer = & (str.c_str() [1]); printf ("% s \ n", указатель); – madnut