개발 Tools/C_개념
C 자료구조 문자열 ( strcpy, strlen, strcat, strcmp, strdup )
전컴반
2022. 1. 10. 21:41
반응형
문자열
c언어에서 문자열은 배열을 만들어서 저장한다. 배열의 칸 하나에 한 글자씩 저장한다. 이때 주의해야 할 점은 만약 내가 'hello'를 저장하고 싶다면 5글자지만 6칸의 배열을 만들어야 한다. 왜냐면 문자열이 끝났다는 NULL(\0) 문자를 넣어줘야 한다.
선언하는 방법은 2가지 정도가 있는데 차이점이 있다.
char str[10];
str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0';
또는
char str[] = "hello";
또는
char *str = "hello";
출력법
printf("%s", str);
중요한 것은 ""이다.
첫 번째 선언 방법에서 \0가 없다면 hello 뒤에 이상한 문자들이 나온다.
두 번째 선언 방법은 글자 수에 맞게 배열을 선언해준다. NULL(\0) 문자를 포함한 크기다.
세 번째 선언 방법은 수정이 불가하다는 점에서 이것을 string literal이라 부른다.
문자열 함수
문자열 함수는 string.h인데 대표적으로 사용하는 애들은 아래 정도 있다
strcpy(str1, str2) : 문자열 복사, str2를 str1으로 복사한다
strlen(str) : 문자열 길이
strcat(str1, str2) : 문자열 합치기
strcmp(str1, str2) : 문자열 비교, str2와 str1이 같다면 0을 반환, str1이 str2보다 사전적으로 더 크면 양수를 반환, 작으면 음수를 반환
strdup(str1) : 문자열 복제
문자열들의 저장
여러 개의 단어들을 포인터를 이용하여 저장할 수 있다.
#define BEFFER_SIZE 100 // 입력받는 크기가 100을 넘지 않는다
int main() {
char *words[100]; //칸마다 저장되는 배열의 타입
int n = 0; //단어의 갯수
char buffer[BUFFER_SIZE];
while (n < 4 && scanf("%s", buffer) !=EOF) {
words[n] = strdup(buffer); //그냥 buffer라고 하면 계속 갱신되서 마지막에 입력받은 값만 남는다
n++;
}
for (int i = 0; i < 4; i++) {
printf("%s\n", words[i]);
}
}
입력을 받을 때 buffer 앞에 '&'가 없는 이유는 배열의 이름이 주소를 저장하고 있는 포인터 변수이기 때문이다.
EOF는 파일의 끝까지 도달하는 것을 의미한다.(end of file)
반응형