This is a bit written from memory so I apologize if I made a mistake in this posting. I created a struct and wanted to assign a name to it, but I get this error:
error: incompatible types in assignment of
const char[3]' to
char[15]'
For the life of me I tried to understand what exactly is wrong here, I thought a constant char can still be assigned.
# include <stdio.h>
struct type{
char name[15];
int age;
};
main(){
struct type foo;
foo.name = "bar"; //error here
foo.age=40;
printf("Name- %s - Age: %d", foo.name, foo.age);
}
name is a fixed-size static buffer. You need to use strcpy or similar functions to assign it a string value. If you change it to be const char* name
instead, then your code should work as-is.
char name[15];
declares an array , which is not assignable in C. Use string copying routines to copy the values, or declare name
as a pointer - char* name;
(here you'd have to worry about memory pointed to still being valid).
You can initialize a struct-type variable as a whole though:
struct type foo = { "bar", 40 };
Here string literal "bar"
(four bytes including zero-terminator) will be copied into the name
member array.
您需要使用strcpy
复制字符串内容。
He's confusing an initializer with an assignment.
Once the object is created (the "struct type foo;" line), you have to strcpy into "name").
struct type foo; foo.name = "bar"; //error here <<= The compiler can only do a pointer assignment at this point, which is not valid.
==============
Don't write this crappy code:
strcpy_s(foo.name, 15, "bar");
The following allows you change the length in one place:
strcpy_s(foo.name, sizeof(foo.name), "bar");
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.