#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char Name[100];
typedef struct Daughter
{
Name name;
int age;
int height;
}Tochter;
typedef struct Father
{
Tochter kleine[6];
Name v;
int age;
int height;
int numofdaugh;
}Dad;
int main (void)
{
Vater Martin, *pDad;
int numofdau;
printf("How many Daughters? ");
scanf("%i", Martin.numofdaugh);
pDad = &Martin;
pDad->kleine[0].name = "Alice";
// I also tried Martin.kleine[0].name = "Alice";
}
我也试着用函数改变元素,但它仍然不起作用,错误消息是:表达式必须具有指针到对象类型,但它具有类型"Tochter"
- 不能赋值数组
scanf("%i", &Martin.numofdaugh);
pDad = &Martin;
strcpy(pDad->kleine[0].name, "Alice");
PS类型Dad
应为Vater
scanf
需要传递一个指针
而不是:
scanf("%i", Martin.numofdaugh);
传递一个指向Martin.numofdaugh
的指针:
scanf("%i", &Martin.numofdaugh);
您还想使用strncpy
将字符串复制到Name
。
Name bobs_name = {0};
strncpy(bobs_name, "Bob", 100);
使用strncpy
而不是strcpy
可以防止溢出的可能性,因为Name
限制为100个字符。
pDad->kleine[0].name = "Alice";
是错误的,因为你不能这样复制c -string(使用strcpy
)。
更正确的是:
strcpy(pDad->kleine[0].name,"Alice");
@Chris答案是正确的,但你也有一个类型Vater
,不存在其他地方