C:不兼容的类型?

Jos*_*eph 0 c struct types char

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

我在标记的行上出现错误,incompatible types when assigning to type ‘char *[6]’ from type ‘char **’但两个变量都char *[6]在代码中定义.任何见解?

tem*_*def 9

这段代码的问题在于该行

f.baz=qux;
Run Code Online (Sandbox Code Playgroud)

尝试将数组分配给qux数组baz.在C中,数组不是变量,不能分配新值.要查看更简单的示例,此代码:

int arr1[10], arr2[10];
arr1 = arr2; // Error!
Run Code Online (Sandbox Code Playgroud)

是非法的,因为第二行尝试为第二个数组分配第一个的值,这在C中是不允许的.

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

int i;
for (i = 0; i < 6; ++i)
    f.baz[i] = qux[i];
Run Code Online (Sandbox Code Playgroud)

这是合法的,因为数组的每个单独元素都是a char *,可以分配.

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

memcpy(f.baz, qux, sizeof f.baz);
Run Code Online (Sandbox Code Playgroud)

这将复制数组中所有字段的原始字节.