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]
在代码中定义.任何见解?
这段代码的问题在于该行
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)
这将复制数组中所有字段的原始字节.