【发布时间】:2012-10-28 19:59:37
【问题描述】:
我刚刚偶然发现了 C 的一个非常奇怪的错误/功能(在 Windows 上 GCC 设置为 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)。我不知道为什么,但我会尝试更多。如果我可以制作一个重现错误的 sn-p,我将发布另一个问题。
【问题讨论】:
-
测试试图达到什么目的?目前的代码 正在 分配并且不会成功。是否应该测试字符串 A = 字符串 B?如果是,那么“==”也不是您想要的,您需要查看 strcmp 或更好的 strncmp。或者如果你需要复制字符串 strcpy / strncpy.
-
我的错。我的意思是测试为什么会发生这种情况。我将更改函数的名称。
标签: c windows gcc struct variable-assignment