문제를 풀다가 아래 코드처럼 했더니 오류가 나서 고민해보다가 알게 됬는데 이 부분에 대해서 이해가 되지 않는 부분이 있어 질문을 합니다. ``` #include <stdio.h> char a[100], s[100]="abcd"; int main(void) { a=s; // 이 부분은 오류가 나고 a=s를 strcpy(a,s);로 바꿔야 올바른 정답이 나옵니다... printf("%s", a); return 0; } ``` 그런데 문자열이 아닌 단일문자일 경우에는 오히려 strcpy를 쓰면 오류가 나고 아래 코드 처럼 풀어야 올바른 답이 나옵니다... ``` #include <stdio.h> int main(void) { char s[100], a='A'; s[0]=a; // 이 부분(위 코드와 대조되는 부분) printf("%c %c", s[0], a); return 0; } ``` <질문> 1. 왜 문자열의 경우 a문자열을 s문자열과 똑같이 만들려면(대입 하려면) 숫자처럼 a=s라고 하면 안 되고 굳이 strcpy( )함수를 사용하나요? 2. 왜 문자열과 다르게 단일문자에서는 반대로 strcpy함수를 쓰면 오류가 나고 a[0]=s라고 해야 오류가 나지 않는 건가요? 항상 빠르고 정확한 답변 감사합니다ㅠㅠ
# 배열과 포인터의 특성을 명확히 구분하셔야 합니다. 이거 자세히 설명하려면 그림 그려가면서 30분은 설명해야하는 내용이군요.. ㄷㄷ;; 포인터의 성질과 문자열. 문자열 포인터와 배열의 차이를 학습해보세요. 일단 간단히 압축하면 다음과 같습니다. ### 답변1: 변수 a는 배열이므로, 새로운 값으로 변경 불가 배열의 경우, 새로운 주소 값으로 변경할 수 없습니다. ``` char a[100] = "asdf"; // 배열 a의 주소지가 0x1000 이라 가정. a = 0x2000; // ERROR: a는 배열로 선언된 변수이므로 새로운 값으로 변경 불가! ``` ### 답변2: strcpy는 말그대로 문자열을 복사하는 용도 따라서 단일 문자를 복사할 수 없음. ### 답변3: 배열 연산이 오류가 나지 않는 이유 뭐라고 설명을 드려야할지...;; ``` char a[100]; // 배열 a의 주소지가 0x1000이라 가정. a[0] = 'a'; // 메모리 주소지 0x1000에 서부터 0번째 인덱스 위치에 'a' 문자열을 저장! ```