This has nothing to do with structs - arrays in C are not assignable:
char a[20];
a = "foo"; // error
you need to use strcpy:
strcpy( a, "foo" );
or in your code:
strcpy( sara.first, "Sara" );
Or you could just use dynamic allocation, e.g.:
struct name {
char *first;
char *last;
};
struct name sara;
sara.first = "Sara";
sara.last = "Black";
printf("first: %s, last: %s\n", sara.first, sara.last);
You can also initialise it like this:
struct name sara = { "Sara", "Black" };
Since (as a special case) you're allowed to initialise char arrays from string constants.
Now, as for what a struct actually is - it's a compound type composed of other values. What sara
actually looks like in memory is a block of 20 consecutive char values (which can be referred to using sara.first
, followed by 0 or more padding bytes, followed by another block of 20 consecutive char values (which can be referred to using sara.last
). All other instances of the struct name
type are laid out in the same way.
In this case, it is very unlikely that there is any padding, so a struct name
is just a block of 40 characters, for which you have a name for the first 20 and the last 20.
You can find out how big a block of memory a struct name
takes using sizeof(struct name)
, and you can find out where within that block of memory each member of the structure is placed at using offsetof(struct name, first)
and offsetof(struct name, last)
.
use strncpy
to make sure you have no buffer overflow.
char name[]= "whatever_you_want";
strncpy( sara.first, name, sizeof(sara.first)-1 );
sara.first[sizeof(sara.first)-1] = 0;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With