728x90
문자열 변경하고 싶을때.
strcpy()를 사용한다. 헤더함수에 string.h를 포함시켜야한다.
1
2
3
4
5
6
7
8
|
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[10] = "Hi";
strcpy(str, "bye");
}
|
cs |
문자배열 str에 저장되어있는 Hi가 strcpy에 의해 bye로 바뀐다.(str문자배열로 복사)
주의!! 이렇게 하면 안됨.
1
2
3
4
5
6
7
8
|
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[10] = "Hi";
str = "bye"; //이렇게 하면 안됨!
}
|
cs |
얼핏보면 될 것 같지만,
배열의 이름은 배열이 저장되어있는 메모리의 주소이다.
위에 처럼 하면, 주소에 bye문자열을 넣는 것과 같기때문에 안됨.
문자열 상수와 포인터
문자열 상수는 텍스트 세그먼트라는 메모리 영역에 저장되며 변경 불가능하다.(텍스트 세그먼트는 읽기만 가능하다! )
데이터 변수는 데이터 세그먼트라는 메모리 영역에 저장되며 변경 가능하다.
1
|
char *p = "hello world";
|
cs |
이것은 가능하다. "hello world"문자열의 메모리상 주소를 포인터 변수p에 저장한다. 여기서 포인터변수 p는 데이터 세그먼트 영역에 저장된다.
1
2
|
char *p = "hello world";
strcpy(p, hi program); //문자열 상수를 변경하려고함!
|
cs |
strcpy()함수로 문자열 상수를 변경하려고했다. 하지만 문자열 상수는 '텍스트 세그먼트'에 저장되기 때문에 변경이 불가능하다.
1
2
|
char *p = "hello world";
p = "hi programming"; //이것은 가능하다.
|
cs |
이 예시는 가능하다. 문자열 상수를 변경하는대신, 포인터변수 p가 다른 곳을 가르키만들면 된다.
그러면, 처음에 포인터 변수p는 "hello world"라는 문자열 상수의 메모리상 주소를 가르키고있다가, "hi programming"문자열 상수의 메모리상 주소를 가르키도록 바꿔주면 된다.
728x90
'C프로그래밍 > 개인 공부' 카테고리의 다른 글
C언어 - 10진수를 2진수로 바꾸기(재귀함수) (1) | 2022.10.13 |
---|---|
C언어 - 구조체와 포인터 (0) | 2022.08.09 |
C언어 - 간접 참조 연산자 * (0) | 2022.07.14 |
C언어 - 쉽게 풀어쓴 C언어 express 10장 배열 실습문제(짝수번) (0) | 2022.07.13 |
C언어 - 정렬 (0) | 2022.07.06 |