你的代码的问题是在这个声明中
struct point B = {A.a, A.b, A.name};
最后一个初始化器A.name 具有指针类型char *,用于初始化字符数组。不能用指针初始化数组。
你可以写
struct point B = A;
考虑到由于这个初始化
struct point
{
int a, b;
char name[5];
} A = {3, 5, "plane"}, B;
字符数组A.name 不包含字符串,因为数组中没有空格用于字符串文字的终止零字符'\0'。
因此,您不能在printf 的调用中使用格式字符串%s
printf("%d %d %s", B.a, B.b, B.name);
你可以写
printf("%d %d %.*s", B.a, B.b, ( int )sizeof( B.name ), B.name);
那是你的程序可能看起来像
#include <stdio.h>
struct point
{
int a, b;
char name[5];
} A = {3, 5, "plane"}, B;
int main( void ){
struct point B = A;
printf("%d %d %.*s", B.a, B.b, ( int )sizeof( B.name ),B.name);
}
如果您希望字符数组name 包含一个字符串,那么您需要将其大小至少扩大一个字符,例如
struct point
{
int a, b;
char name[6];
} A = {3, 5, "plane"}, B;
在这种情况下,您可以使用printf的以下调用
printf("%d %d %s", B.a, B.b, B.name);