문제를 풀다가 아래 코드처럼 했더니 오류가 나서 고민해보다가 알게 됬는데
이 부분에 대해서 이해가 되지 않는 부분이 있어 질문을 합니다.
```
#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라고 해야 오류가 나지 않는 건가요?
항상 빠르고 정확한 답변 감사합니다ㅠㅠ
sehongpark님의 답변
# 배열과 포인터의 특성을 명확히 구분하셔야 합니다.
이거 자세히 설명하려면 그림 그려가면서 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' 문자열을 저장!
```