임베디드

[C언어] 문자열 파싱 2 - sscanf sprintf strtok strchar strstr strtol

히똔 2022. 4. 11. 15:49
728x90
반응형

C언어 / 문자열 파싱 / sscanf sprintf strtok strchar strstr strtol / 임베디드 개발 / 임베디드 문자열 파싱 / 임베디드 파싱

전 포스팅에 이어 문자열 파싱에 대해 이야기해보겠다.

sscanf

문자열을 내가 원하는 형식으로 쪼개어 저장한다.

sscanf 사용법

예시

char vect[30]="[Blog] IT 2022";

char title[10];
char msg[10];
int num;

sscanf(vect, "[%s]%s%d", &title, &msg, &num);
// title 에 Blog, msg에 IT, num에 2022 저장됨

 

sprintf

문자열을 내가 원하는 형식으로 합쳐서 저장할 수 있다.

sprintf 사용법

예시

char vect[30];

char title[10] = "Blog";
char msg[10] = "IT";
int num = 2022;

sprintf(vect, "[%s] %s %d", title, msg, &num);
//vect에 [Blog] IT 2022 저장됨

 

strtok


주로 문자열을 자를때 사용한다.
문자열 내 특정 문자열을 찾고, 발견시 해당 문자열이 '\0'으로 변경된다. 특정 문자열 발견 전까지의 문자열이 리턴된다.

char*p=strtok(문자열, 구분자);

실제로 strtok을 이용해서 문자열을 파싱해보는 코드는 다음과 같다.

char vect[30]="My.name.is.Heesun";

char *p = strtok(vect,".");
while(p != NULL){
    printf("%s ",p);
    p = strtok(NULL,".");
}
// 출력 : My name is Heesun

strtok 의 첫번째 인자로 NULL이 들어가면, 다음 문자부터 탐색해서 구분자 전까지의 문자열을 다시 리턴한다.

 

strchr

문자 검색하는 함수로, 발견시 찾은 문자열의 위치 주소를 리턴한다.

strchr(문자열, 찾고자하는문자);

예시

char vect[30]="ABCDEF";

printf("%s", strchr(vect, 'B'));
//BCDEF 출력

 

strstr

문자열 검색, 발견 시 찾은 문자열의 위치 주소를 리턴한다.

strstr(문자열, 찾고자하는문자열);

예시

char vect[30]="ABCDEF";

printf("%s", strstr(vect, "BCD"));
//BCDEF 출력됨

 

strtol

10진법으로 변환해주는 함수

strtol(문자열, 마지막포인터, 진법);

예시

char vect16[30]="0x38A5";
int number16 = strtol(vect16, NULL, 16);

char vect2[30]="1001011";
int number2 = strtol(vect2, NULL, 16);

 

10진수에서 다른 진수로 변환하는 것은 sprintf를 활용하면 된다.

 

 

[C언어] 문자열 파싱 1 : strlen strcpy strncpy strcat strcmp atoi

임베디드 업계에서 문자열 파싱을 통해 시각화를 구현해야한다. 그러기 위해선 로그데이터를 제대로 분석해야한다. 문자열로 이루어진 로그데이터를 가공하고 차트화하기 위해 문자열 함수를

asdfmelody.tistory.com

 

728x90
반응형