가능한 중복 :
Why is strtok() Considered Unsafe?C++에서 안전하지 않은 의미는 무엇입니까?
난 그냥 그 strtok를가 안전하지 않은 (Visual Studio를 사용) 경고를 발견했으며, strtok_s는 없습니다. 안전하지 않은 이유는 무엇입니까?
제 질문의 첫 번째 부분은 here으로 대답하지만 안전하지 않은 의미는 무엇이며 문제 및 가능한 문제는 무엇입니까?
가능한 중복 :
Why is strtok() Considered Unsafe?C++에서 안전하지 않은 의미는 무엇입니까?
난 그냥 그 strtok를가 안전하지 않은 (Visual Studio를 사용) 경고를 발견했으며, strtok_s는 없습니다. 안전하지 않은 이유는 무엇입니까?
제 질문의 첫 번째 부분은 here으로 대답하지만 안전하지 않은 의미는 무엇이며 문제 및 가능한 문제는 무엇입니까?
strtok은 스레드로부터 안전하지 않습니다. 두 개 이상의 스레드가 strtok을 동시에 호출하면 결과는 정의되지 않습니다. 다른 사용자의 답변을 재현하고 있습니다.
strtok()은 입력을 처리 할 때 해당 입력을 삭제합니다. 도 스레드로부터 안전하지 않으므로 파서에서 호출하는 다른 함수 은 strtok()을 사용하고 파서를 호출하는 함수 은 strtok()을 사용하지 않습니다. 호출 된 함수 의 조건은 일반적으로 너무 번거롭지 않습니다. 그러나 라이브러리 코드에서 두 번째 조건 (strtok()을 사용하는 호출 함수가 없음)은 집행 가능하지 않습니다.
응답
이 질문에 주어졌다 : Dealing with input in C두 개 이상의 스레드가 * 다른 * 문자열에서 동시에 strtok을 호출하면 결과가 정의되지 않습니다. 그 이유는'strtok'은 마지막으로 어떤 문자열을 호출했는지 기억하기 때문에 다시 호출 할 때 널 포인터를 전달할 수 있기 때문입니다. 'strtok'는 스레드로부터 안전한 방법으로 구현 될 수 없습니다. –
@Steve Jessop : 고마워, 나는 "같은"부분을 없애기 위해 편집했다. – Tudor
을하지 더 이상! 고정 – SpeedBirdNine