strtok()를 잘못 사용하면 데이터가 잘려 나중에 프로그램 실행에서 예기치 않은 결과가 발생할 수 있습니다. strtok 함수는 문자열을 토큰화하는 데 사용되므로 구분 기호로 나눈 여러 문자열로 구분합니다. strtok()가 처음 호출될 때 문자열은 토큰과 문자 구분 기호로 구문 분석됩니다. strtok() 함수는 문자열을 구분 기호 문자의 첫 번째 인스턴스까지 구문 분석하고, 제자리에 있는 문자를 null 바이트(“)로 바꾸고 토큰의 첫 번째 문자의 주소를 반환합니다. strtok()에 대한 후속 호출은 가장 최근에 배치된 null 문자 직후에 구문 분석이 시작됩니다. 좋아, 그래서 너무 엄격하지 않다 스트록에 전달 된 후 문자열에 대한 유일한 유효한 사용은 strcpy, memcpy, 무료, 또는 할당에 lhs로 인수로? 그리고 그 호출 중 하나가 된 후 문자열이 다시 유효해집니다. 다음은 strtok_r()의 사용을 보여주는 간단한 C 프로그램입니다 : 나는 strtok 기능에 몇 가지 문제가 있었다. 여기에 대한 자세한 설명과 사용법입니다. strtok에 대한 각 호출은 정적 변수를 수정합니다. 실제 응용 프로그램 스트톡은 일부 구분 기호를 기반으로 여러 문자열로 문자열을 분할하는 데 사용할 수 있습니다.
이 함수를 사용하여 간단한 CSV 파일 지원을 구현할 수 있습니다. CSV 파일에는 계각량으로 쉼표가 있습니다. 또 다른 가능성은 초기 인수를 수정하지 않는 strtok()의 고유한 구현을 제공하는 것입니다. 이 호환 솔루션에서 토큰화되는 문자열은 strtok() 호출 후 참조되지 않는 임시 버퍼로 복사됩니다: strtok_s 함수는 문자열 외부에 저장되지 않도록 보호하여 POSIX strtok_r 함수와 다릅니다. 토큰화되고 런타임 제약 조건을 확인합니다. 참조: 1) 수동 페이지 strtok_r() 2) http://stackoverflow.com/questions/15961253/c-correct-usage-of-strtok-r 답변#1: strtok()에 전달된 문자열은 strtok()가 수정하므로 더 이상 안전하지 않습니다. 이론적으로 는 strtok()에 전달 한 후 문자열을 참조해서는 안됩니다. CCE는 strtok() 문자열의 복사본을 제공한 다음 복사본을 해제하여 이 작업을 수행합니다. 이 예제에서는 strtok() 함수를 사용하여 첫 번째 인수를 콜론 구분 토큰으로 구문 분석합니다. 새 줄의 문자열에서 각 단어를 출력합니다.
PATH가 “/usr/bin:/usr/sbin:/sbin”이라고 가정합니다. C 함수 strtok()는 구문 분석할 초기 문자열과 const-qualified 문자 구분 기호라는 두 개의 인수를 취하는 문자열 토큰화 함수입니다. 토큰의 첫 번째 문자에 대한 포인터 또는 토큰이 없는 경우 null 포인터에 대한 포인터를 반환합니다. 대부분의 다른 토큰화자와 달리 strtok의 구분 기호는 이후토큰마다 다를 수 있으며 이전 토큰의 내용에 따라 달라질 수도 있습니다. 이 함수는 파괴적입니다: 문자열 str의 요소에 “ 문자를 씁니다. 특히 문자열 리터럴은 strtok의 첫 번째 인수로 사용할 수 없습니다. strtok(3) [Linux 2008] 상태의 Linux 프로그래머 매뉴얼(man) 페이지는 C의 strtok() 함수와 마찬가지로 strtok_r(strtok_r()에서 문자열을 토큰 시퀀스로 구문 분석하는 것과 동일한 작업을 수행합니다. strtok_r()는 strtok() strtok에 대한 첫 번째 호출이 포인터를 첫 번째 하위 문자열로 반환하는 재진입 버전입니다. 첫 번째 인수가 NULL인 모든 다음 호출은 첫 번째 호출에서 전달된 문자열을 사용하고 다음 하위 문자열을 반환합니다. 함수는 더 이상 하위 문자열을 사용할 수 없는 경우 NULL을 반환합니다.
C는 문자열을 일부 구분 기호로 분할하기 위한 strtok() 및 strtok_r() 두 함수를 제공합니다.