본문 바로가기

Language, IDE/C, C++

[C/C++] C스트링

반응형

C++에서는 스트링을 C스트링과 STL의 스트링 클래스로 제공한다.



C스트링은 C에서 계승된 방식으로 char배열 형태로 나타낸다. char배열에 끝에 '\0'문자(널 문자)를 넣어 문자열의 끝을 나타낸다. 예를들어 "hello world"를 저장한다고 하면 11문자 + 널문자를 해서 총 12개의 배열공간이 필요하다.



선언

c스트링은 

char 변수이름[최대문자열길이+1]; 형태로 선언한다.


char str[10];




초기화

c스트링은 =키워드를 이용하여 초기화 할 수 있다.


char str[10] = "hello";

이렇게 하면 배열에


str[0] str[1] str[2] str[3] str[4] str[5] str[6] str[7] str[8] str[9]

  h       e       l        l       o       \0     ?       ?       ?       ?


이같이 저장된다.

크기가 10인 배열을 선언하면 최대 9자까지 저장이 가능하지만 굳이 모든 원소를 사용하지 않아도 된다.



초기화시에 배열의 크기를 지정하지 않고도 선언할 수 있다.


char str[] = "hello"


이와같이 선언하면 6의 크기를 가지는 배열을 자동으로 설정해준다.

이 방법으로 선언할시에는 반드시 초기화를 해주어야 한다.


char str[]; 이 방법은 가능하지 않다.



값 할당

c스트링은 =키워드로 할당을 할 수 없다.

예를들어 

char str[10];

str = "hello";


그래서 c스트링에 값을 할당하려면 <cstring>라이브러리의 strcpy함수를 이용한다.

strcpy(str,"hello");




equal(==)

c스트링은 ==로 비교를 할 수 없다. 

마찬가지로 비교를 하려면 <cstring>라이브러리의 strcmp함수를 이용한다.

strcmp(str1,str2);

strcmp함수는 두 스트링이 같으면 false 다르면 true를 리턴한다.





<cstring>,<string.h> 함수

1. strcpy(str1,str2) - 문자열(스트링) 복사

str2의 값을 str1에 복사

strcpy(str1, "abc");

str1에 abc를 복사


2. strncpy(str1,str2,n) - n개의 문자열(스트링) 복사

str2의 값을 n개까지 str1에 복사

strncpy(str1,"abc",2);

str1에 ab를 복사


3. strcat(str1,str2) - 문자열(스트링) 연결

str2의 값을 str1의 끝에 연결함

char str1[10] = "abc";

strcat(str1,"def");

str1의 끝에 def를 복사

str1 -> "abcdef"


4. strlen(str) - 문자열(스트링) 길이반환

str의 길이를 반환(널값은 포함되지 않는다.)

char str1[10] = "abc";

strlen(str) -> 3


5. strcmp(str1,str2) - 문자열(스트링) 비교

두 스트링의 아스키 값을 비교하여 

str1과 str2가 동일 하면 0을

str1이 크면 1을

str2가 크면 -1을 리턴한다.

즉 같으면 0(false) 같지 않으면 0이 아닌값(true)


char str1[10] = "123";

strcmp(str1, "123")  -> 0

strcmp(str1, "456")  -> -1

strcmp(str1, "000")  -> 1



반응형

'Language, IDE > C, C++' 카테고리의 다른 글

[C/C++] 문자 조작 함수2  (0) 2013.07.03
[C/C++] 문자 조작 함수1  (0) 2013.07.02
[C++] 연산자 오버로딩  (0) 2013.06.28
[C++] 프렌드 함수  (0) 2013.06.28
[C++] 클래스 디폴트 접근 제어자  (0) 2013.06.26