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 函数以使其按预期工作?
最佳答案
你有括号
&(*string[1]);
错了。我想你的意思是
&((*string)[1]);
您的原始版本取消引用 strings
数组的第一个元素的指针,然后获取它的地址,而您实际上想要取消引用给定的指针(因为它只指向一个字符串), 然后取它的第一个元素(第一个字符),然后取它的地址。
一种稍微不那么令人费解的表达方式是
*string + 1
顺便说一句。
关于c - 在 C 中切片字符串的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533830/