char gay[5] = "abcd";
gay = "efgh";
이렇게 하는데 왜 오류 나는거야?;';
c++. MFC 응용프로그램 작성하고있고
error C2440: '=' : 'const char [5]'에서 'char [5]'(으)로 변환할 수 없습니다.
이렇게 뜸....
char gay[5] = "abcd";
gay = "efgh";
이렇게 하는데 왜 오류 나는거야?;';
c++. MFC 응용프로그램 작성하고있고
error C2440: '=' : 'const char [5]'에서 'char [5]'(으)로 변환할 수 없습니다.
게이상수다에요? 상수는 =연산자좌변위치불가능?
우변이 상수인데여..
배열 = 상수 포인터
lvalue도 상수야
C/C++에서 대입은 스칼라 끼리만 가능. 배열은 스칼라가 아님. 고로 스칼라 타입이 아닌 배열이 대입 문의 좌변으로 올 수가 없음(l-value 불가). 그리고 마찬가지로 우변의 상수 문자 배열 "efgh"도 대입문에 위치했기 때문에 스칼라 문맥으로 처리하기 위해 스칼라 값인 첫번째 원소를 가리키는 포인터로 바꿔 읽힘. (중요: 배열은 스칼라로 취급되는 문맥에서는 첫번째 원소를 가리키는 포인터로 바꿔 읽힌다.)
아무튼 고로 배열 = 포인터; 를 시도한 꼴이고 좌변에 배열이 올 수 없을 뿐더러 우변에는 포인터가 와서 전체적으로 이상한 식이 되어 버림. 너가 원하는 작업을 하려면 strcpy(gay, "efgh"); 이렇게 복사 함수를 써야 한다. 뭐 저게 마법의 함수도 아니고 내부 까보면 루프 돌면서 dest[i] = src[i]; 식으로 대입해줄 뿐임.
codesafer // 좀 더 정확하게 표현하면 저 상황에서의 l-value(gay)는 상수가 아니라 스칼라가 아니기 때문에 오류가 난 것이에요. 컴파일 오류가 그렇게 말해주고 있네요.
codesafer // 아니다. 다시 생각해 보니 성님 말씀이 맞네요. 대입문은 스칼라 끼리만 가능하니 좌변도 첫번째 원소에 대한 포인터로 바꿔 읽혔겠네요.