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函数以使其按预期工作?
发布于 2012-09-21 15:52:02
你把括号放在
&(*string[1]);
不对。我猜你的意思是
&((*string)[1]);
您的原始版本取消引用strings
数组第一个元素的指针,然后获取该元素的地址,而您实际上希望取消引用给定的指针(因为它只指向单个字符串),然后获取该指针的第一个元素(第一个字符),然后获取该元素的地址。
一种稍微不那么复杂的表达方式是
*string + 1
顺便说一下。
发布于 2012-09-21 15:53:35
您似乎正在尝试从字符串中删除第一个字符。所以:
char* remove_first_char(const char* s) {
return (s+1);
}
https://stackoverflow.com/questions/12533830
复制相似问题