在C中切割字符串的开头

NVI*_*NVI 0 c pointers c-strings

void slice_first_char(char ** string)
{
    *string = &(*string[1]);
}

int main(int argc, char * argv[])
{
    char * input = "abc";
    input = &(input[1]);
    puts(input); // "bc" as expected.

    slice_first_char(&input);
    puts(input); // \372\277_\377
                 // What‘s going on?
}
Run Code Online (Sandbox Code Playgroud)

如何重写slice_first_char函数以使其按预期工作?

Fre*_*abe 11

你有括号

&(*string[1]);
Run Code Online (Sandbox Code Playgroud)

错误.我猜你的意思

&((*string)[1]);
Run Code Online (Sandbox Code Playgroud)

您的原始版本取消引用strings数组的第一个元素的指针,然后获取该地址,而您实际上想要取消引用给定的指针(因为它只指向一个字符串),然后取出它的第一个元素(第一个字符)然后取出那个地址.

表达这种情况的方式略微不那么精确

*string + 1
Run Code Online (Sandbox Code Playgroud)

顺便说说.