strcat()
dst 문자열 뒤에 src 문자열을 덧붙인다
dst 문자열의 NULL 캐릭터가 있는 위치부터 src 문자열을 추가한다
따라서, dst의 크기가 충분하지 않다면 위험한 함수이다
strcat() 사용예시
#include <stdio.h>
#include <string.h>
#define LENGTH (20)
int main(void)
{
char string1[LENGTH] = "Hello, ";
char string2[LENGTH / 2] = "Hello, ";
const char* string3 = "world!";
printf("sizeof(string1): %zu\n", sizeof(string1));
printf("sizeof(string2): %zu\n", sizeof(string2));
printf("sizeof(string3): %zu\n", sizeof(string3));
printf("strcat(string1, string3): %s\n", strcat(string1, string3));
printf("strcat(string2, string3): %s\n", strcat(string2, string3));
return 0;
}
strstr()
str 문자열에 substr 문자열이 포함되어 있다면,
str 문자열 속 첫 substr 문자열의 시작주소 반환한다
포함되어 있지 않다면, NULL 포인터를 반환한다
strstr 함수의 매개변수 str은 const char* 형태이지만,
반환 자료형은 char* (const가 없는 형태) 형태이다
따라서 인자로 데이터 섹션의 Read-Only에 위치하는 문자열을 전달하면 안 된다는 점을 주의해야 한다
앞서 설명했듯이,
str 문자열에 substr 문자열이 포함되어 있을때,
str 문자열 속 첫 substr 문자열의 시작주소를 반환하는 이유는
만약, 새로운 문자열을 만들어서 반환해준다면
메모리 어딘가에 새로운 문자열을 위한 공간을 할당 받아야한다
하지만,
스택메모리는 불가능하고,
힙메모리는 RAII를 위배하게 되고,
데이터 섹션은 전역 문자열을 선언해두는 것과 같기 때문에 좋은 선택이 아니다
따라서, 메모리 관리에서 효율성을 가져다주는 찾은 위치의 메모리 주소를 반환하는 것이다
strstr() 사용예시
#include <stdio.h>
#include <string.h>
int main(void)
{
char msg[] = "Hello, world! good to see you!";
const char* msg_in_data_section = "Hello, world! good to see you!";
// msg_in_data_section은 strstr() 함수에 전달되어선 안됨
char* result;
result = strstr(msg, "int");
result = result == NULL ? "NULL" : result;
printf("result: %s\n", result);
result = strstr(msg, "good");
result = result == NULL ? "NULL" : result;
printf("result: %s\n", result);
return 0;
}
char *strtok(char *str, const char *delimiters)
strtok 함수는 C 언어에서 문자열을 토큰으로 분리하는 데 사용되는 함수이다
문자열을 지정된 구분자(delimiter)를 기준으로 여러 개의 토큰으로 나누어 준다
strtok은 주로 문자열 파싱(parsing)에 사용되며, 파일 입출력, 네트워크 통신 등 다양한 상황에서 유용하게 활용된다
매개변수 str은 토큰을 분리할 대상이 되는 문자열이다
첫 호출 시에만 전체 문자열을 전달하고,
이후 호출에서는 NULL을 전달하여 이전에 발견된 토큰 이후의 부분에서 계속해서 작업한다
매개변수 delimiters는 토큰을 분리할 구분자(delimiter)들을 나타내는 문자열이다
반환 값으로는 찾아진 토큰의 시작 주소를 반환하며,
더 이상 토큰이 없을 경우 NULL을 반환합니다.
strtok() 사용 예시
첫 호출 시, 대상 문자열(str)에서 첫 번째 토큰을 찾아 반환하고,
찾은 토큰의 끝에 NULL 문자를 삽입한다
이후 호출에서는 NULL 대신 str을 전달하여, 이전 호출에서 찾은 토큰 이후의 부분에서 다음 토큰을 찾는 작동 방식을 가지고 있다
#include <stdio.h>
#include <string.h>
int main(void)
{
char msg[] = "Hello, world. Goodbye, world.";
// strtok() 함수도 새로운 문자열을 만들지 않고, 원본을 토큰화 하기에 const가 붙지 않음
const char delims[] = ",. ";
char* token = strtok(msg, delims);
while (token != NULL)
{
printf("%s\n", token);
token = strtok(NULL, delims);
// msg의 다음 토큰을 구하려면 msg 대신 NULL을 넣음
// 더 이상 토큰이 없다면 strtok()는 NULL 포인터를 반환
}
return 0;
}
'C > [코드조선] C 핵심' 카테고리의 다른 글
[C] strrev() (0) | 2024.02.10 |
---|---|
[C] strtolower(), strtoupper() (0) | 2024.02.10 |
[C] strcpy() (0) | 2024.02.09 |
[C] strcmp() (0) | 2024.02.09 |
[C] strlen() (0) | 2024.02.09 |