다음을 통해 공유


lstrcpynW 함수(winbase.h)

원본 문자열에서 버퍼로 지정된 수의 문자를 복사합니다.

경고 사용하지 마세요. 대신 StringCchCopy 사용하는 것이 좋습니다. 비고를 참조하세요.
 

통사론

LPWSTR lstrcpynW(
  [out] LPWSTR  lpString1,
  [in]  LPCWSTR lpString2,
  [in]  int     iMaxLength
);

매개 변수

[out] lpString1

형식: LPTSTR

복사된 문자를 받는 대상 버퍼입니다. 버퍼는 종료 null 문자의 공간을 포함하여 iMaxLength지정된 TCHAR 값의 수를 포함할 만큼 커야 합니다.

[in] lpString2

형식: LPCTSTR

함수가 문자를 복사할 원본 문자열입니다.

[in] iMaxLength

형식: int

종료 null 문자를 포함하여 lpString2lpString1가리키는 버퍼로 가리키는 문자열에서 복사할 TCHAR 값의 수입니다.

반환 값

형식: LPTSTR

함수가 성공하면 반환 값은 버퍼에 대한 포인터입니다. 원본 문자열이 iMaxLength 문자보다 크더라도 함수가 성공할 수 있습니다.

함수가 실패하면 반환 값이 NULL lpString1 null로 종료되지 않을 수 .

발언

lpString1 가리키는 버퍼는 종료 null 문자를 포함할 만큼 충분히 커야 하며, iMaxLength 지정된 문자열 길이 값에는 종료 null 문자에 대한 공간이 포함되어야 합니다.

lstrcpyn 함수는 원본 및 대상 버퍼가 겹치는 경우 정의되지 않은 동작을 가합니다.

보안 경고

이 함수를 잘못 사용하면 애플리케이션의 보안이 손상됩니다. 이 함수는 SEH(구조적 예외 처리)를 사용하여 액세스 위반 및 기타 오류를 catch합니다. 이 함수는 SEH 오류를 catch할 때 문자열을 null로 종료하지 않고 호출자에게 오류를 알리지 않고 NULL 반환합니다. 호출자는 공간 부족이 오류 조건이라고 가정해도 안전하지 않습니다.

lpString1 가리키는 버퍼가 복사된 문자열을 포함할 만큼 크지 않으면 버퍼 오버런이 발생할 수 있습니다. 전체 문자열을 복사할 때 sizeof 바이트 수를 반환합니다. 예를 들어 lpString1TCHAR szString[100]선언된 버퍼 szString1 가리키는 경우 sizeof(szString1)는 WCHAR아닌 바이트 단위의 버퍼 크기를 제공하므로 함수의 유니코드 버전에 대한 버퍼 오버플로가 발생할 수 있습니다.

버퍼 오버플로 상황은 애플리케이션에서 많은 보안 문제의 원인이며 액세스 위반이 발생하는 경우 애플리케이션에 대한 서비스 거부 공격을 일으킬 수 있습니다. 최악의 경우 버퍼 오버런은 특히 lpString1 스택 기반 버퍼인 경우 공격자가 실행 코드를 프로세스에 삽입하도록 허용할 수 있습니다.

sizeof(szString1)/sizeof(szString1[0]) 사용하면 버퍼의 적절한 크기가 지정됩니다.

대신 StringCchCopy 사용하는 것이 좋습니다. StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);사용하여 buffer 포인터가 아니거나 StringCchCopy(buffer, ARRAYSIZE(buffer), src);사용해서는 안 된다는 점을 인식하고 포인터로 복사할 때 호출자가 뾰족한 메모리의 크기를 문자 단위로 전달해야 한다는 사실을 인식합니다.

계속하기 전에 보안 고려 사항: Windows 사용자 인터페이스 검토합니다.

메모

winbase.h 헤더는 lstrcpyn을 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한 규칙을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

개념

참조

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCbLength

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

StringCchLength

문자열

lstrcmp

lstrcmpi

lstrlen