C언어의 기초 문법

#include <string.h>

자 또 string.h 나오니까 생각나시죠? 또 엄청나게 배울 게 있다는 걸... 네. 저도 싫지만 이번 거 엄청 길겠네요. 그런데 중요해서 꼭 들으셔야 합니다. 일단 string.h에서는 아주 많은 함수들이 내장되어 있지만(아마 한 100개쯤?) 이 중에서 가장 중요한 것은 이렇게 5개입니다.

strcpy, strcat, strcmp, strchr, strlen

이렇게 5개인데요, 이 5개는 여러가지 역할을 합니다. 아마 들으시고 나면, '저런 함수들이 있었으면 나는 지금까지 반복문 돌리면서 뭐한거지?'라는 생각이 들 거에요. 저도 물론 들었고요. 일단 string.h를 삽입합니다. 전이랑 똑같이 #include <string.h>로 선언하시면 되고요, 제가 하나 하나 설명해드리겠습니다. 


strcpy(char* s1, const char* s2)는 다른 배열로 모든 원소(배열 안에 변수들을 원소라고 합니다)들을 복사합니다. 예시는 다음과 같습니다.

char str1[] = "programmer", str2[11];
strcpy(str2, str1);
puts(str1);
puts(str2);
/* result:

    programmer
    programmer

*/

이처럼 strcpy는 strcpy(붙여넣기 할 배열, 복사할 배열); 형태로 선언합니다.


strcat(char* s1, const char* s2)는 한 배열에 다른 배열을 이어 붙이는 함수입니다. 예시는 다음과 같습니다.

char dest[30] = "C ", source[30] = "programmer";
strcat(dest, source);
puts(dest);
// retsult: C programmer

이처럼 strcat는 strcat(배열, 앞 배열에 붙여질 배열); 로 선언할 수 있습니다.


strcmp(const char* s1, const char* s2)는 배열 2개를 대소문자로 비교하는 함수입니다. 예시는 다음과 같습니다.

char str1[] = "programmer", str2[] = "Programmer";
printf("%d", strcmp(str1, str2));
// result: -1

여기에서 strcmp는 strcmp(배열1, 배열2); 로 선언할 수 있습니다. 만약 앞 배열이 크다면 1, 같다면 0, 같지 않다면 -1을 출력하는데, 주로 두 문자열이 같은 지 아닌 지 확인할 때 씁니다.


strchr(const char* s, int c)는 배열에서 특정 문자를 찾습니다. 예시는 다음과 같습니다.

char strTemp;
char string[] = "This is a good car!";

strTemp = strchr(string, 'a');
printf("%s \n", strTemp);

strTemp = strchr(string, 'c');
printf("%s", strTemp);

/* result:
    a good car!
    car!
*/

이처럼 strchr은 그 문자를 찾으면 그 부분 전에를 끊습니다. strchr(배열, 찾으려고 하는 문자의 ASCII)로 정의할 수 있습니다. 여기에서 ASCII는 int형인데 그냥 char로 입력해도 자동으로 int로 변환시켜줍니다.


마지막으로, strlen(const char* s)은 문자의 수(NULL 제외)를 세주는 함수입니다. 이건 소스코드를 안 써도 이건 아실 수 있겠죠? 아마 이게 가장 활용이 많이 될 것이라 생각합니다.


와... 엄청 기네요... 외우실 필요 없습니다. 이해하시고 넘어가시면 됩니다. 그런데 외우고 계시면 아주 편리하겠죠?

댓글

댓글 본문
  1. Joel
    여기도 질문이 많을 것이라 생각합니다.

    일단 제가 생각하기에, "변수 뒤에 별* 붙는 건 뭐에요?" 라고 분명히 물어보실텐데, 이건 포인터입니다. 지금은 알 필요 없고, 여기에 써져 있는 const char* s2 이런 건 구조체입니다. 진짜 어렵고 쓸데없는 문법들이죠... 지금은 모르셔도 되요. 지금 알려드리면 절대 이해 못 하실 것 같고요