gpt4 book ai didi

C:编译器在赋值时说 "incompatible types",但它们是相同的;和相关的东西

转载 作者:行者123 更新时间:2023-11-30 18:59:13 24 4
gpt4 key购买 nike

我刚刚偶然发现了 C 的一个非常奇怪的错误/功能(GCC 在 Windows 上设置为 C11)。

struct my_struct {
char my_string[65];
};

void foo (struct my_struct * array1, struct my_struct * array2) {
array2[0].my_string = array1[0].my_string;
}

int main () {
struct my_struct array1[60];
struct my_struct array2[60];
strcpy(array1[0].my_string, "Hello World!");
foo(array1, array2);
printf("%s\n", array2[0].my_string);
return 0;
}

如果我尝试编译它,

error: incompatible types when assigning to type 'char[65]' from type 'char *'

foo 函数内。

为什么?它们的结构和数据类型完全相同。

另外,如果我将函数修改为

array2[0] = array1[0];

它有效。但我正在制作另一个程序,它将字符串打印为 (null)。我不知道为什么,但我会再尝试一下。如果我可以制作一个重现错误的代码片段,我将发布另一个问题。

最佳答案

错误消息令人困惑,但您遇到的基本问题是数组不是 C 中的第一类类型 - 您可以声明数组,但实际上无法直接对它们执行任何操作。

任何在表达式中使用数组的尝试都将被转换(静默)为指向数组第一个(或第零个,如果您愿意)元素的匿名指针。该指针不能被赋值,只能被取消引用。

因此,当您说 array2[0].my_string = array1[0].my_string; 时,您正在尝试分配给无法分配的内容,即使它们看起来具有相同的类型。与您收到诸如 3 = 5; 之类的错误的方式大致相同,但在这种情况下您可能会收到更清晰的错误消息。

关于C:编译器在赋值时说 "incompatible types",但它们是相同的;和相关的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13112457/

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