gpt4 book ai didi

c - 为什么这个语句在 C 中的一个函数中导​​致错误,而在另一个函数中却没有?

转载 作者:行者123 更新时间:2023-12-02 10:41:38 26 4
gpt4 key购买 nike

声明 *p++ = *源代码++; 在下面的第一个程序中不会导致任何错误,但会导致错误 ISO C++ forbids cast to non-reference type used as lvalue 在第二个程序中编译。为什么会发生这种情况?

  • 第一个程序
    #include 

    char *my_strcpy(char *destination, char *source)
    {
    char *p = destination;
    while (*source != '\0')
    {
    *p++ = *source++;
    }
    *p = '\0';
    return destination;
    }

    int main()
    {
    char source[] = "A string to be used for demonstration purposes";
    char destination[80];
    my_strcpy(destination, source);
    puts(destination);
    return 0;
    }
  • 第二个程序
    #include 

    char source[] = "A string to be used for demonstration purposes";
    char destination[80];

    int main()
    {
    char *p = destination;
    putchar('\n');
    while(*source != '\0')
    {
    *p++ = *source++;
    }
    *p = '\0';
    puts(destination);
    return 0;
    }
  • 最佳答案

    发生这种情况是因为您的第一个程序增加了一个指针,而在第二个程序中您应用了 ++运算符到数组。尽管数组通常表现得像指针,但它们不是指针。数组支持指针算术,但不支持将它们视为 lvalue 的指针运算符。 (即尝试修改它们指向的位置)。

    解决这个问题很简单 - 只需创建一个指向数组的指针,并在循环中使用该指针,如下所示:

    char *p = destination;
    putchar('\n');
    char *src = source;
    while(*src != '\0')
    {
    *p++ = *src++;
    }
    *p = '\0';
    puts(destination);
    return 0;

    关于c - 为什么这个语句在 C 中的一个函数中导​​致错误,而在另一个函数中却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669304/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com