■ Requirements






■ Functions



▶ size_t strlen (const char *string)

Parameters

string

Null이 아닌 문자열.

Return Value

string문자열 중에 Null 문자를 제외한 문자의 개수를 반환한다.

Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

이 함수는 string문자열 중에 Null 값을 제외한 문자의 개수를 반환한다.

Security Note

이 함수는 잠재적으로 buffer overrun 문제가 발생할 수 있다.

Buffer overrun은 적절하지 않은 수준의 권한이 되는, System 공격 방법중 하나이다.

더 자세한 사항은 Avoiding Buffer Overruns 을 참조하라.

추가 참조

char string[32] = "hello, world";



int size1 = sizeof (string);

int size2 = strlen (string);



printf("sizeof(string) = %d ,strlen(string) = %d\n");

result:

sizeof(string) = 32,strlen(string) = 12





▶ char* strcpy (char *strDestination, const char *strSource)

Parameters

strDestination

문자열이 복사될 목적 문자열 포인터

strSource

Null로 끝나는 원본 문자열


이 함수는 복사된 문자열 포인터를 반환한다.

Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

strcpy 함수는 Null 문자로 끝나는 strSource 문자열을 strDestination로 복사한다.

원본과 목적 문자열이 겹쳐진다면 strcpy는 오작동 할 수도 있다.

Security Note

strcpy함수는 strSource를 복사하기 전에 strDestination의 공간을 확인하지 않아

잠재적으로 Buffer overrun을 발생시킬 수 있다. 대신 strncpy을 사용하라.



▶ char* strncpy (char *strDest, const char *strSource, size_t count )

Parameters

strDest

문자열이 복사될 목적 문자열 포인터

strSource

원본 문자열

count

복사될 문자 개수

Return Value

strDest을 반환한다. Error를 위한 반환값은 정의 되지 않았다.



strncpy 함수는 strSource의 처음부터 count개의 문자를 strDest로 복사하고,

strDest를 반환한다.

만약 count가 strSource의 길이보다 작거나 같다면,

복사된 문자열에 자동으로 Null문자를 붙여주지 않는다.

만약 count가 strSource의 길이보다 크다면,

목적 문자열은 count길이 뒤에 null문자를 붙여준다.

원본과 목적 문자열이 겹쳐진다면 strncpy는 오작동 할 수도 있다.


Security Note

strncpy는 strDest에 충분한 공간이 남아있는지 검사하지 않는다.

그럼으로 buffer overrun 발생의 잠재적 가능성이 있다.

count가 복사될 문자의 개수를 제한한다는 것을 잊지 마라.

그것은 strDest의 크기를 제한하는 것이 아니다.



▶ char* strdup (const char *strSource)

Parameter

strSource

Null로 끝나는 원본 문자열

Libraries

C run-time libraries의 모든 버전.

Return Value

이 함수는 복사된 문자열의 저장공간을 리턴하거나,

새로 할당할 수 없을땐 Null을 반환한다.

Remarks

strdup함수는 strSource의 복사를 위해 저장공간을 할당하려고 malloc함수를

호출한다. 그리고 strSource를 할당한 저장공간에 복사한다.


▶ char* strcat (char *strDestination, const char *strSource)

Parameters

strDestination

Null로 끝나는 목적 문자열

strSource

Null로 끝나는 원본 문자열

Libraries

C run-time libraries의 모든 버전.

Return Value

이 함수는 strDestination 를 반환한다. Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

strcat 함수는 strDestination 문자열에 strSource 문자열을 붙여주고,

Null 문자로 목적 문자열을 종료 시켜준다.

목적 문자열의 Null 종료문자는 원본 문자열의 첫 문자에 의해 덮어 써진다.

문자열을 복사하거나 붙일때에는 overflow를 검사하지 않는다.

원본 문자열과 목적 문자열이 겹칠때에는 strcat 함수는 오작동 할 수 있다.

Security Remarks

첫번째 인자인 strDestination 은 반드시 strDestination 와 strSource 문자열,

그리고 Null 문자인 '\0'를 합친 크기보다 충분히 커야만 한다.

그렇지 않다면, buffer overrun이 발생할 수 있다.

만약 접근영역을 침범하면 서비스거부공격이 일어날 수 있고,

최악의 상황에서는 공격자가 당신의 프로세스에 실행가능한 코드를 삽입할 수 있다.

만약 strDestination 이 stack-based buffer였다면 특히 그렇다.

strncat 나 wcsncat 함수를 사용하여라.



▶ char* strncat (char *strDest, const char *strSource, size_t count)

Parameters

strDest

Null로 끝나는 목적 문자열

strSource

Null로 끝나는 원본 문자열

count

붙여질 문자 개수

Libraries

C run-time libraries의 모든 버전.

Return Value

이 함수는 strDestination 를 반환한다. Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

strncat 함수는 기껏해야 strSource 문자열의 처음부터 count 개수만큼의 문자를

strDest 문자열에 붙인다.

목적 문자열의 Null 종료문자는 원본 문자열의 첫 문자에 의해 덮어 써진다.

만약 count 개수만큼 붙이기 전에 strSource 안에 Null 문자가 있다면,

strncat 함수는 Null 문자를 포함해 strSource 의 모든 문자를 붙인다.

만약 count 가 strSource문자열의 길이보다 크다면, strSource 문자열의 길이가

count 대신 쓰여진다. 결과 문자열은 Null문자로 끝나게 된다.

원본 문자열과 목적 문자열이 겹칠때에는 strncat 함수는 오작동 할 수 있다.

Security Remarks

첫번째 인자인 strDest은 반드시 strDest와 strSource 문자열,

그리고 Null 문자인 '\0'를 합친 크기보다 충분히 커야만 한다.

그렇지 않다면, buffer overrun이 발생할 수 있다.

만약 접근영역을 침범하면 서비스거부공격이 일어날 수 있고,

최악의 상황에서는 공격자가 당신의 프로세스에 실행가능한 코드를 삽입할 수 있다.

만약 strDestination 이 stack-based buffer였다면 특히 그렇다.

마지막 인자인 count는 strDest의 크기가 이나라

strDest중에 복사될 문자 개수임을 명심해라.




특정 site들에서 참고하여 보기 좋게 정리하며 제 생각을 추가한 것입니다

오래전 자료라서 어느 site인지는 기억이 나질 않네요.

+ Recent posts