프로그램을 작성하다 보면 문자열 데이터를 사용할 때가 많아요.
대부분의 프로그래밍 언어에서는 문자열을 관리하는 별도의 형식을 제공하지만 C언어는 문자열 형식을 제공하지 않아요.
그렇다고 C언어에서 문자열 데이터를 표현할 수 없는 것은 아니예요.
C언어에서는 문자열을 char 형을 원소로 하는 배열이나 char 형을 원소로 하는 포인터 형식으로 문자열을 표현할 수 있어요.
그리고 문자열 데이터를 표현할 때 쉽게 표현할 수 있게 쌍 따옴표를 사용하여 문자열을 표현할 수 있어요.
#define
MAX_NAME_LEN 50
char
name[MAX_NAME_LEN + 1] = "hello";
const char *str = "yahoo";
char 형식 원소로 배열을 선언하면 문자열을 구성하는 문자 데이터를 기억하는 메모리를 할당하여 조회 및 변경이 가능하죠.
하지만 char 형을 원소로 하는 포인터는 데이터를 기억하는 저장소의 역할을 하는 것은 아니예요.
예를 들어 char 형을 원소로 하는 두 개의 배열의 초기값을 “hello”로 설정하면 각각의 배열을 위해 할당한 메모리에 독립적으로 문자열을 설정해요.
그리고 각각의 배열의 원소에 접근하여 변경하는 것이 가능하죠.
하지만 두 개의 포인터 변수에 초기값을 “yahoo”로 설정하면 읽기 전용 메모리에 문자열을 배치한답니다.
그리고 두 개의 포인터 변수는 해당 메모리 주소를 값으로 갖는 것이죠.
이 때 읽기 전용 메모리에 할당한 문자열을 문자열 리터럴 상수라 부르며 내용을 변경할 수 없어요.
◈ 배열과 포인터를 이용한 문자열 사용
#include <stdio.h>
int main()
{
char name1[6]="hello";
char name2[6]="hello";
const char *str1 = "yahoo";
const char *str2 = "yahoo";
printf("name1: %p name2:%p\n",name1,name2);
printf("str1: %p str2:%p\n",str1,str2);
name1[0] = 'y';
//str1[0]
= 'k'; //값을 변경할 수 없음
printf("name1: %s name2: %s\n",name1,name2);
printf("str1: %s str2: %s\n",str1,str2);
return 0;
}
◈ 실행 결과
name1: 0023FD90 name2: 0023FD80
str1: 00EA5848 str2: 00EA5848
name1: yello name2: hello
str1: yahoo str2: yahoo
따라서 포인터로 문자열 변수는 char 형 배열을 인자로 전달받거나 문자열 리터럴 상수로 초기화할 때 사용하세요.
C언어에서 문자열을 형식으로 제공하는 것이 아니라서 문자열을 복사하거나 비교하는 연산자는 제공하지 않아요.
이 때는 char 형식을 원소로 하는 포인터 형식과 더하기 연산, 간접 연산, 인덱스 연산 등을 이용하여 처리하세요.
그리고 문자열 관련 라이브러리 함수를 이용하면 이러한 작업을 쉽게 할 수 있어요.
이들을 사용하려면 string.h 파일을 포함하세요.
이번 장에서는 문자열을 선언하고 관련 함수들을 사용하는 방법을 다루기로 할게요.
◈ 배열과 포인터를 이용한 문자열 사용
#include <stdio.h>
#include <string.h>
int main()
{
char name[10]="";
strcpy(name,"hello");
printf("이름:%s\n",name);
printf("문자열 길이:%d\n", strlen(name));
if(strcmp(name,"hello")==0)
{
printf("차이가 없다.\n");
}
else
{
printf("차이가 있다.\n");
}
return 0;
}
◈ 실행 결과
이름:hello
문자열 길이:5
차이가 없다.
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[C언어] 73. 문자열 정리하기 (0) | 2016.04.17 |
---|---|
[C언어] 72. 문자열 복사 (0) | 2016.04.17 |
[C언어] 71. 문자열 비교와 strcmp 함수 (0) | 2016.04.17 |
[C언어] 70. 문자열 길이와 strlen 함수 (0) | 2016.04.17 |
[C언어] 69. 문자열 사용 기초 (0) | 2016.04.17 |
67. 정리하기 (0) | 2016.01.01 |
66. 구현 (0) | 2016.01.01 |
65. 테스트 코드 작성하기 (0) | 2016.01.01 |
64. 함수 원형 결정 (0) | 2016.01.01 |
63. 함수명 결정 (0) | 2016.01.01 |