gpt4 book ai didi

C:不兼容的类型?

转载 作者:太空宇宙 更新时间:2023-11-04 05:06:07 27 4
gpt4 key购买 nike

#include <stdlib.h>
#include <stdio.h>

struct foo{
int id;
char *bar;
char *baz[6];
};

int main(int argc, char **argv){
struct foo f;
f.id=1;

char *qux[6];

f.bar=argv[0];
f.baz=qux; // Marked line

return 1;
}

这只是一些测试代码,所以请忽略 qux 实际上没有任何有用的东西。

我在标记行上收到错误,从类型“char **”分配给类型“char *[6]”时类型不兼容,但两个变量都定义为 char *[6] 在代码中。有什么见解吗?

最佳答案

这段代码的问题在于行

f.baz=qux;

尝试将数组 qux 分配给数组 baz。在 C 语言中,数组不是变量,不能赋新值。要查看更简单的示例,请使用以下代码:

int arr1[10], arr2[10];
arr1 = arr2; // Error!

是非法的,因为第二行试图将第一个数组的值赋给第二个数组,这在 C 中是不允许的。

要解决这个问题,您可能需要编写一个显式循环来复制元素,如下所示:

int i;
for (i = 0; i < 6; ++i)
f.baz[i] = qux[i];

这是合法的,因为数组的每个单独元素都是一个可以赋值的 char *

有时您还会看到用于分配数组的memcpy:

memcpy(f.baz, qux, sizeof f.baz);

这会复制数组中所有字段的原始字节。

关于C:不兼容的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164496/

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