본문 바로가기

Programming/Linux_Platform

헷갈리는 c string 함수들

정리중...


< strstr >

strstr은 문자열 중에서 특정 문구를 찾아 그 위치를 반환해 주는 함수

특히, 포함된 문자열을 찾는데 유용하다. (strcmp 를 사용하면 안된다 !!)


/*strstr */

char * strstr(const char * str1, const char * str2);


참조 : http://tapito.tistory.com/313



1. strcat

 - strcat (string concatenation)은 문자열 2개를 이어 붙이는 역할을 해주는 함수이다. 예컨대, "Love"와 "You"를 합치면 LoveYou가 될 것이다. 이처럼 두개의 문자열을 합쳐주는 함수가 strcat 이다. 이 함수의 사용방법과 내부적인 결과를 자세히 살펴보자. 먼저 함수의 모양을 알아보자.

 

 함수 원형

char* strcat ( char* dest, char* src );

 dest

src를 붙이는 문자열

 src

dest에 붙여지는 문자열

 반환값(return)

성공시 dest, 실패시 NULL

 


참조  : http://blog.naver.com/sharonichoya/220513447408



< strtok >

A 문자열을 B문자열에서 주어진 기준대로 잘라줍니다. (정확히는 NULL 로 치환합니다.)

이함수는 굉장히 독특한 함수입니다.

최초 호출시에만 첫번째 파라미터에 buffer 를 넣어주고, 이후에는 NULL 을 넣어주면 연속으로 동작하게 됩니다.

자세한 설명 : http://tapito.tistory.com/314


"Rachel;Tom-John&Michael@Jude"

를 입력하고 

두번째 파라미터에 ";-&@"

문자열을 준후


연속으로 4번을 호출하면 각각 호출시마다

Rachel

Tom-John

Michael

Jude

를 출력하게 됩니다.

중간에 치환된 <NULL> 이 각 문자열의 끝으로 인식됩니다.


example) 아래와 같이 연속 호출 가능


char* token = strtok(cline, "\n\t"); // cline : 진짜 문자열

const char* type = strtok(nullptr, "\n\t");

int i = strtol(strtok(nullptr, "\n\t"), nullptr, 10);

const char* type = strtok(nullptr, "\n\t");


< strdup >

원문 : http://blog.naver.com/ratmsma/40023807578

--------------------------------------------------------------------------------

1. 사용법

#include <string.h>

char *strdup(const char *S);


--------------------------------------------------------------------------------

2. 설명

strdup() 함수는 문자S 를 복사하고 복사된 문자열을 가리키는 포인터를 반환한다. 문자를 복사할 공간을 확보하기 위해서 내부적으로 malloc(3)이 호출된다. 그러므로 strdup() 함수를 호출해서 문자열 복사를 했다면 free(3) 등을 통해서 공간이 필요없게 되었을때 커널에 되돌려주어야 한다.


--------------------------------------------------------------------------------

3. 반환값

복사된 문자열의 주소를 가리키는 포인터를 반환한다. 에러발생시에는 NULL 을 되돌려준다.


--------------------------------------------------------------------------------

4. 에러


ENOMEM

복사할 문자열을 할당하기 위해 이용할수 있는 메모리가 충분하지 않다.

 

--------------------------------------------------------------------------------

5. 예제

#include <string.h>

int main()

{

    char *line = "hello world!";

    char *dupstr = NULL;

    dupstr = strdup (line);

    printf("%s\n", dupstr);

    free(dupstr);

}



< strtol >


원문 : http://forum.falinux.com/zbxe/?mid=C_LIB&page=9&document_srl=408138


설명

숫자 문자열을 long형 숫자로 변환합니다. atoi()나 atol()과는 달리 (1) 변환하려는 진수를 선택할 수 있으며, (2) 숫자 문자가 아닌 문자를 만나면 그 포인터 위치를 구해 줍니다.

예로, "2007forum.falinux.com" 을 호출하게 되면,

   char   *str;
   char   *ptr;
   long    value;

   str   = "2007forum.falinux.com";
   value = strtol( str, &ptr, 10);
  • value에는 2007이 들어 가고
  • ptr에는 숫자로 변화하지 못하는 문자열의 시작 위치를 구해 줍니다.
    만약 NULL을 넘겨주면 시작 위치를 구하지 않습니다.
헤더stdlib.h
형태long strtol(const char *restrict str, char **endptr, int base);
인수
char *str정수로 변환할 문자열
char **endptr숫자로 변경하지 못하는 문자열의 시작 위치
int base문자열이 가지고 있는 숫자의 진수 (2~32)
반환
long10진 long형 정수 값




'Programming > Linux_Platform' 카테고리의 다른 글

fstab & partition images  (0) 2015.10.19
linux command : stat, fstat, lstat  (0) 2015.10.19
epoll 에 대한 한국어 설명  (0) 2015.10.19
close_on_exec  (0) 2015.10.19
socketpair()  (0) 2015.10.19