problems with char array = char array

前端 未结 2 1510
自闭症患者
自闭症患者 2020-11-29 12:35

I have:

char message1[100];
char message2[100];

When I try to do message1 = message2, I get error:

inco

相关标签:
2条回答
  • 2020-11-29 13:03

    Your suspicions are correct. C (I'm assuming this is C) treats an array variable as a pointer.

    You need to read the C FAQ about arrays and pointers: http://c-faq.com/aryptr/index.html

    0 讨论(0)
  • 2020-11-29 13:25

    You can't assign anything to an array variable in C. It's not a 'modifiable lvalue'. From the spec, §6.3.2.1 Lvalues, arrays, and function designators:

    An lvalue is an expression with an object type or an incomplete type other than void; if an lvalue does not designate an object when it is evaluated, the behavior is undefined. When an object is said to have a particular type, the type is specified by the lvalue used to designate the object. A modifiable lvalue is an lvalue that does not have array type, does not have an incomplete type, does not have a const-qualified type, and if it is a structure or union, does not have any member (including, recursively, any member or element of all contained aggregates or unions) with a const-qualified type.

    The error message you're getting is a bit confusing because the array on the right hand side of the expression decays into a pointer before the assignment. What you have is semantically equivalent to:

    message1 = &message2[0];
    

    Which gives the right side type char *, but since you still can't assign anything to message1 (it's an array, type char[100]), you're getting the compiler error that you see. You can solve your problem by using memcpy(3):

    memcpy(message1, message2, sizeof message2);
    

    If you really have your heart set on using = for some reason, you could use use arrays inside structures... that's not really a recommended way to go, though.

    0 讨论(0)
提交回复
热议问题