wcstok 예제

Posted on

대부분의 다른 토큰화자와 달리 std::wcstok의 구분기호는 이후의 토큰마다 다를 수 있으며 이전 토큰의 내용에 따라 달라질 수도 있습니다. wcstok() 함수는 cwchar.h 헤더 파일에 정의되어 있습니다. wcstok() 함수는 null 이종된 와이드 문자열에서 다음 토큰을 반환합니다. 포인터 delim은 구분기호 문자 즉, 섬망계를 가리킵니다. 이 함수는 파괴적입니다: 문자열 str의 요소에 L“ 문자를 씁니다. 특히, 넓은 문자열 리터럴은 std::wcstok의 첫 번째 인수로 사용할 수 없습니다. 반환 값: wcstok() 함수는 포인터가 있는 경우 다음 토큰의 시작 부분으로 포인터를 반환합니다. 그렇지 않으면 0을 반환합니다. 현재 로캘 또는 전달된 지정된 로캘을 사용하여 문자열에서 다음 토큰을 찾습니다. 이러한 함수의 보다 안전한 버전을 사용할 수 있습니다. strtok_s, _strtok_s_l, wcstok_s, _wcstok_s, _mbstok_s, _mbstok_s, _mbstok_s_l.

str에 의해 가리키는 null 종료 된 넓은 문자열에서 다음 토큰을 찾습니다. 구분 기호 문자는 delim을 가리키는 null-terminated 와이드 문자열로 식별됩니다. 이러한 함수는 버퍼 오버런 문제로 인해 발생할 수 있는 잠재적인 위협을 발생시고 있습니다. 버퍼 오버런 문제는 시스템 공격의 빈번한 방법이며, 이로 인해 부당한 권한 상승이 발생합니다. 자세한 내용은 버퍼 오버런 방지를 참조하십시오. str이 NULL이지만 컨텍스트가 유효한 컨텍스트 포인터에 대한 포인터인 경우 오류가 없습니다. 각 함수는 문자열을 토큰으로 구문 분석하기 위해 스레드 로컬 정적 변수를 사용합니다. 따라서 여러 스레드가 바람직하지 않은 효과 없이 이러한 함수를 동시에 호출할 수 있습니다. 그러나 단일 스레드 내에서 이러한 함수 중 하나에 대한 인터리빙 호출은 데이터 손상 및 부정확한 결과를 생성할 가능성이 높습니다.

다른 문자열을 구문 분석할 때 다음 문자열을 구문 분석하기 전에 한 문자열을 구문 분석으로 완료합니다. 또한 다른 함수가 호출되는 루프 내에서 이러한 함수 중 하나를 호출할 때 위험 가능성에 유의하십시오. 다른 함수가 이러한 함수 중 하나를 사용하여 끝나면 인터리브된 호출 시퀀스가 발생하여 데이터 손상이 트리거됩니다. strtok에 대한 첫 번째 호출에서 함수는 선행 구분 기호를 건너뛰고 strToken의 첫 번째 토큰에 대한 포인터를 반환하여 null 문자로 토큰을 종료합니다. strtok에 대한 일련의 호출을 통해 strToken의 나머지 부분에서 더 많은 토큰을 나눌 수 있습니다. strtok에 대한 각 호출은 해당 호출에서 반환된 토큰 이후에 null 문자를 삽입하여 strToken을 수정합니다. strToken에서 다음 토큰을 읽으려면 strToken 인수에 대한 NULL 값을 가진 strtok를 호출합니다. NULL strToken 인수로 인해 strtok는 수정된 strToken에서 다음 토큰을 검색합니다. strDelimit 인수는 구분 기호 집합이 다를 수 있도록 한 호출에서 다음 호출로 모든 값을 취할 수 있습니다. strToken에 있는 다음 토큰에 대한 포인터를 반환합니다. 함수는 더 이상 토큰을 찾을 수 없을 때 NULL을 반환합니다.

각 호출은 반환된 토큰 이후에 발생하는 첫 번째 구분 기호에 대해 null 문자를 대체하여 strToken을 수정합니다. 토큰이 더 이상 없는 경우 다음 토큰 또는 null 포인터의 시작 부분에 대한 포인터입니다. std::strtok와 달리 이 함수는 정적 저장소를 업데이트하지 않습니다. 출력 값은 로캘의 LC_CTYPE 범주 설정설정의 영향을 받습니다. 자세한 내용은 setlocale를 참조하십시오. str 찾을 토큰 또는 토큰을 포함하는 문자열입니다. 컨텍스트 함수에 대한 호출 사이에 위치 정보를 저장하는 데 사용됩니다. 컨텍스트 매개 변수는 strtok 및 _strtok_l에 사용되는 정적 버퍼를 대체하므로 동일한 스레드에서 두 개의 문자열을 동시에 구문 분석할 수 있습니다.