简体   繁体   中英

Error converting const char to char in struct?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM