2011-12-13 2 views
-2

가능한 중복 :
Why is strtok() Considered Unsafe?C++에서 안전하지 않은 의미는 무엇입니까?

난 그냥 그 strtok를가 안전하지 않은 (Visual Studio를 사용) 경고를 발견했으며, strtok_s는 없습니다. 안전하지 않은 이유는 무엇입니까?

제 질문의 첫 번째 부분은 here으로 대답하지만 안전하지 않은 의미는 무엇이며 문제 및 가능한 문제는 무엇입니까?

+0

을하지 더 이상! 고정 – SpeedBirdNine

답변

2

strtok은 스레드로부터 안전하지 않습니다. 두 개 이상의 스레드가 strtok을 동시에 호출하면 결과는 정의되지 않습니다. 다른 사용자의 답변을 재현하고 있습니다.

strtok()은 입력을 처리 할 때 해당 입력을 삭제합니다. 도 스레드로부터 안전하지 않으므로 파서에서 호출하는 다른 함수 은 strtok()을 사용하고 파서를 호출하는 함수 은 strtok()을 사용하지 않습니다. 호출 된 함수 의 조건은 일반적으로 너무 번거롭지 않습니다. 그러나 라이브러리 코드에서 두 번째 조건 (strtok()을 사용하는 호출 함수가 없음)은 집행 가능하지 않습니다.

응답

이 질문에 주어졌다 : Dealing with input in C

+1

두 개 이상의 스레드가 * 다른 * 문자열에서 동시에 strtok을 호출하면 결과가 정의되지 않습니다. 그 이유는'strtok'은 마지막으로 어떤 문자열을 호출했는지 기억하기 때문에 다시 호출 할 때 널 포인터를 전달할 수 있기 때문입니다. 'strtok'는 스레드로부터 안전한 방법으로 구현 될 수 없습니다. –

+1

@Steve Jessop : 고마워, 나는 "같은"부분을 없애기 위해 편집했다. – Tudor

관련 문제