很基础的结构体里的字符数组赋值有关问题

很基础的结构体里的字符数组赋值问题
一般的字符数组可以这么赋值char a[20]="abc\rdefghiaaaaaaaa";
但是如果定义在结构体里struct stra{
  char a[20];
  int length
  };
就不能stra r;r.a[20]="abc\rdefghiaaaaaaaa"这样赋值,如果字符串小于19,会提示cannot convert from 'char [19]' to 'char [20],如果等于19,提示left operand must be l-value,这个是为什么,如果以后要动态给结构体的字符数组赋值该怎么搞

------解决方案--------------------
strcpy(r.a, "abcdefg");
------解决方案--------------------
strcpy
------解决方案--------------------
除了巴乔提供的方法,还可以:
C/C++ code

// 1. 初始化赋值
struct stra r = {"abc\rdefghiaaaaaaaa", 19};

// 2.内存拷贝
struct stra r;
char *s = "abc\rdefghiaaaaaaaa";
memcpy(r.a, s, strlen(s) + 1);

------解决方案--------------------
r.a[20]="abc\rdefghiaaaaaaaa"
这样相当于是给a的第20号元素赋值,况且也只有初始化的时候可以用字符串来赋值,其他时候都只能用字符,或者用strcpy
------解决方案--------------------
r.a[20]="abc\rdefghiaaaaaaaa";这句话的意义是想a的第21个元素赋值,当然不行了。