[C] 문자열 함수 정리 / stdio.h, string.h, stdio.h 구분
String.h
-
s1, s2
:char
형 배열 -
strlen(char* ptr)
문자열의 길이를 구한다. 문자열의 끝인 NULL은 포함하지 않음 -
strcmp(s1, s2)
문자열1과 문자열2를 ASCII 코드 기준으로 비교한다.- -1 : 문자열2가 클 때
- 0 : 두 문자열이 같을 때
- 1 : 문자열1이 클 때
다만 리눅스와 OSX에서는 문자열1의 ASCII코드값에서 문자열2의 코드값을 뺀 결과를 반환함.
-
strcpy(s1, s2)
s2
를s1
으로 문자열을 복사한다. -
strcat(s1, s2)
s1
뒤에s2
문자열을 붙인다. -
strchr(s1, char)
문자열 안에서 해당 문자를 검색하여 해당 문자의 포인터를 반환한다.char* s1 = "Hello World"; char* ptr = strchr(s1, 'W'); printf("%s", ptr);
결과 : 해당 위치로부터
NULL
까지 문자열을 출력.World
-
strrchr(s1, char)
오른쪽부터 문자를 검색하여 해당 문자의 포인터를 반환함 -
strstr(s1, s2)
문자열 안에서 문자열을 검색하여 해당 문자열의 포인터를 반환한다. -
strtok(s1, char)
문자를 기준으로 문자열을 자르고 잘린 부분은NULL
로 변한다. 따라서 문자열 리터럴에는 사용할 수 없다.char* s1 = "Hello World"; char* ptr = strtok(s1, " "); // 공백을 기준으로 잘라냄 printf("%s", ptr); ptr = strtok(NULL, " "); // NULL 다음 포인터로 이동 후 잘라냄 printf("%s", ptr);
결과
Hello World
stdio.h
-
sprintf(s1, "%", val1, val2, ...)
서식을 지정하여 문자열을 생성한다.char* array[10]; sprintf(array, "%d %s", 10, "hello");
정수를 문자열로 변환할 때
sprintf(s1, "%d", 10); // 10진수 sprintf(s1, "%x", 10); // 16진수 소문자 sprintf(s1, "%X", 10); // 16진수 대문자
실수를 문자열로 변환할 때
sprintf(s1, "%f", 0.33333);
stdlib.h
-
atoi(s1)
문자열을 정수로 변환한다. -
atof(s1)
문자열을 실수로 변환한다. -
strtol(s1, ptr* end, int num)
특정 진법으로 표기된 문자열을 정수로 변환한다.char s1[11]={"10 0x1"}; char* end; int num1 = strtol(s1, &end, 10); int num2 = strtol(end, &end, 16); printf("%d\n", num1); printf("0x%x\n", num2);
결과
10 0x1
-
strtof(s1, ptr* end, int num)
문자열을 실수로 변환한다.