Как уже отмечалось в других ответах, вы можете инициализировать массив символов только строковым литералом, вы не можете присвоить строковый литерал массиву символов.Тем не менее, структуры (даже те, которые содержат символьные массивы) - это еще один источник рыбы.
Я бы не рекомендовал делать это в реальной программе, но это демонстрирует, что хотя типам массивов нельзя присваивать, структуры, содержащие типы массивовможет быть.
typedef struct
{
char value[100];
} string;
int main()
{
string a = {"hello"};
a = (string){"another string!"}; // overwrite value with a new string
puts(a.value);
string b = {"a NEW string"};
b = a; // override with the value of another "string" struct
puts(b.value); // prints "another string!" again
}
Итак, в вашем исходном примере должен скомпилироваться следующий код:
typedef struct{
char a[6];
} point;
int main()
{
point p;
// note that only 5 characters + 1 for '\0' will fit in a char[6] array.
p = (point){"onetw"};
}