c - 在 C 中切片字符串的开头

标签 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?
}

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

最佳答案

你有括号

&(*string[1]);

错了。我想你的意思是

&((*string)[1]);

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

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

*string + 1

顺便说一句。

关于c - 在 C 中切片字符串的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533830/

相关文章:

C#函数指针?

c - 指针魔术: structs with pointer members and more

c - 关于使用指针算术的 toupper()

C 比较字符串的某些内容

c++ - 为什么我需要在分配时用()初始化动态分配的数组?

c - 指向 char 到 char 数组的指针

c - 为什么当我指定 "%.2x"时会得到 8 个十六进制数字

c++ - 警告 - 从 size_t 转换为 DWORD,可能丢失数据

c - 这个 __usercall 包装器有什么问题?

C、Xcode 和内存