업데이트:

태그: ,

카테고리:

strcpy

char	*ft_strcpy(char *dest, char *src)
{
	int		i;

	i = 0;
	while (src[i])
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';
	return (dest);
}

strcpy는 src를 dst로 널문자를 포함해 복사한다.
단, src와 dst를 크기에 딱맞게 복사해 넣으면

리턴 값은 dest이다.

strncpy

’'’c++ char *ft_strncpy(char *dest, char *src, unsigned int n) { unsigned int i;

i = 0;
while (i < n && src[i])
{
	dest[i] = src[i];
	i++;
}
while (i < n)
{
	dest[i] = '\0';
	i++;
}
return (dest); } '''

strncpy는 len만큼 src로부터 dst에 집어넣는다, 만약 src가 n보다 작다면, 나머지는 널문자로 채운다.
그리고 dest를 리턴한다

strncpy는 만약 dest의 크기만큼을 n으로 주게되면 null 종료를 보장하지 않으므로 이 경우에는, 더 안전하게 사용하기 위해선

(void)strncpy(buf, input, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = '\0';

이런 방식으로 마지막에 널문자를 추가하는 작업을 추가로 해줘야한다.

strlcpy

strncpy보다 안전하게 작동한다. strncpy는 사용시 n에 src에서 최대 destsize -1 만큼의 문자열을 dest로 복사한다.

unsigned int	ft_strlcpy(char *dest, char *src, unsigned int size)
{
	unsigned int	i;

	i = 0;
	while ((i < size - 1) && (src[i]))
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';
	i = 0;
	while (src[i])
	{
		i++;
	}
	return (i);
}

이렇게 복사 이후에는 dest가 nul로 종료됨을 보장할 수 있어야한다.
그리고 strlcpy는 복사대상문자열 (src)의 길이를 반환한다는 특징이 있다.

strcmp

인자로 받은 두 문자열을 널문자를 제외하고 비교한다.
strcmp는 0보다 크거나 같거나 작은 정수를 반환하는데, 이는 s1이 s2와 비교해 더 큰지, 작은지, 같은지를 의미한다.

비교는 unsigned char로 진행되기때문에 ‘\200’이 ‘0’보다 크다!

strncmp

strncmp는 n보다 많이 비교하지 않는다. 즉 n개만큼 비교한다.
널값 다음에 있는 문자는 비교되지 않는다.
이또한 unsigned char로 비교되며 ‘\200’은 ‘\0’보다 크다.(당연?).

strcat

strcat은 인자를 2개를 받습니다.
null이 제거된 s2를 복사해 null이 제거된 s1의 끝에 넣는다. 그리고 ‘\0’을 추가한다.

s1은 결과값을 유지하기위한 충분한 공간을 들고있어야만한다.

strncat

strncat은 s2로부터 n개보다 많이 가져오지않는다. 붙인 후 널문자를 붙인다.

위 cat함수는 모두 s1포인터를 반환한다.
위 cat함수는 모두 s1포인터를 반환한다.

댓글남기기