如何从头到尾移动字符串中的字符

Pet*_*rba 2 c pointers

正如标题所说,在我的程序中,我(经过许多程序后)得到标记词。不幸的是,由于颠倒了它们,它们在单词的开头保留了标点符号,例如。,驼鹿

如何,从头到尾移动->驼鹿,

到目前为止,我已经尝试过(ptrchar *):

temp = strdup(ptr);
temp = &ptr[0];
ptr[0] = ptr[1];
ptr[strlen(ptr)-1] = temp;
free(temp);
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

赋值使指针来自整数而不进行强制转换

警告:赋值从指针生成整数而不进行强制转换

如何解决?

unw*_*ind 5

像这样的东西:

void swap_last(char *str)
{
  const size_t len = strlen(str);
  if(len > 1)
  {
    const char   first = str[0];
    memmove(str, str + 1, len - 1);
    str[len - 1] = first;
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,以上假设str是有效的。