0
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?
}

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

4

2 回答 2

11

你有括号

&(*string[1]);

错误的。我猜你的意思是

&((*string)[1]);

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

表达这一点的一种稍微不那么令人费解的方式是

*string + 1

顺便一提。

于 2012-09-21T15:52:01.830 回答
3

您似乎正在尝试从字符串中删除第一个字符。所以:

char* remove_first_char(const char* s) {
  return (s+1);
}
于 2012-09-21T15:53:34.680 回答