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