프로그래밍

 3198, 1/160 회원가입  로그인  
   d4rkang3l
   c언어 컴파일오류질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3008 [복사]


#include<stdio.h>

void main()
{
        char a,ch[6],*pt;
        a='K';
        ch="Hello";
        pt=ch;
        printf("a=%c pt=%s *pt=%c ch=%s \n",a,pt,*pt,ch);
}
예제파일인데요 이걸컴파일하면
error C2106: '=' : left operand must be l-value
이오류가 뜨는데요 오류에 관해서 찾아봤더니 l-value값이 잘못됐다는데...
아직 포인터에 관해서 충분한 개념이 잡히지않은지라 도저히 모르곘습니다..알려주세요!

  Hit : 4559     Date : 2011/05/16 10:52



    
clockmaker 제대로 되게 하시려면
char *ch;
ch = "Hello";
정도로 하시거나
배열을 써야겠다!라면
char ch[6] = "Hello";
이렇게 하셔야 합니다.
왜인지는 l-value 등을 검색해보시면서, 맞는 코드와 비교해 가며 공부하시면 될 것 같네요.
2011/05/16  
clockmaker 아 추가적으로 약간 복잡해지긴 하는데
원래의 코드를 살리고 싶으시면
strcpy 함수를 사용하시면 될 겁니다.
2011/05/16  
d4rkang3l 기본예제인데 왜 어째서 오류가있는걸까요.... 2011/05/17  
clockmaker 음 아마 기본 예제 코드의 경우
책(예를 들어)의 저자가 일일히 컴파일 해 보지 않고 간단히 써서 넣어놓는 경우가 있어
이런 종류의 실수가 많이 일어날 수도 있겠죠 ㅇ_ㅇ
2011/05/18  
d4rkang3l #include<stdio.h>

void main()
{
char a,*pt;
char ch[6]="Hello";
a='K';
pt=ch;
printf("a=%c pt=%s *pt=%c ch=%s \n",a,pt,*pt,ch);
}
이거랑 저위에거랑은 별차이가없지않아여?
저위에는 미리 선언해주고 그다음 초기화 한거고
지금 이건 선언과동시에초기화한거아니에여?ㅜ
2011/05/18  
clockmaker 차이가 있지요.
조금 더 생각할 거리를 드리자면
char 변수를 배열로 선언하면, char가 여러 개 있는 걸로 생각할 수도 있고
string으로 생각할 수도 있죠? 그러한 차이가 생길 겁니다.
'=' 기호는 양 쪽이 등가일 때 사용하지요?
2011/05/19  
prosthetics char ch[6]에서 ch는 배열의 첫번쨰 주소를 가리키는 포인터입니다.
다만 배열에서 이름은 가리키는 곳이 변할 수 없도록 상수로 지정됩니다.
따라서 종종 "배열의 첫 주소를 가리키는 주소상수"라고도 하는데요,
변수 = 상수or변수or식; 과 같이 써야하는건 아시겠지요.
대입연산자 왼쪽에 상수는 올 수 없으므로 "왼쪽의 값이 잘못됬습니다."라는 오류가 뜨는겁니다.

정리하면
- 배열의 이름은 주소상수
- 대입연산자 왼쪽에는 상수가 올 수 없음
2011/05/25