为什么将字符串文字分配为结构的字符数组成员的值会产生错误?

Why does assigning a string literal as value of a structure's character array member yield an error?

存在我定义的结构如下:

struct details
{
    char name[20];
    int age;
    char country[20];
};

但是,在此特定实例中,声明结构对象并将字符串文字作为值分配给两个字符数组成员之一会产生错误。当我通过以下方式赋值时出现错误:

int main()
{
    struct details d1;
    d1.name="Constantine";
    d1.country="Byzantium";
    exit(EXIT_SUCCESS);
}

我的 GCC C 编译器产生的错误如下:

错误:'const char [12]' 到 'char [20]'

的赋值不兼容类型

发生这种情况是否是因为字符串文字是一个常量字符数组,而我声明为所述结构的组成部分的字符数组成员本质上不是常量?将上述结构成员声明为常量会解决手头的错误吗?或者我是否采用了不同的方法来将初始值加载到所述结构成员?

在C语言中=不复制数组的上下文。字符串文字是一个 const char 数组。要复制数组,您需要遍历数组的所有元素。

char *copy_string(char *dest, const char *src)
{
    char *wrk = dest;
    while((*wrk++ = *src++)) {}
    return dest;
}

由于字符串操作在编程中非常常见,C 标准库提供了字符串操作函数(strcpystrlenstrcmp 等)'out of the box'

您只能在初始化对象时使用赋值。在初始化期间,字符串文字将被复制到数组中。

    struct details d1 = {.name="Constantine", .country="Byzantium"};
    char str[] = "Hello World";
    int arr[] = {0,1,2,3,4,5,6,7,8,9,10};