#include <stdio.h>
#include <unistd.h>
unsigned int ft_strlen(char *src)
{
unsigned int cnt;
cnt = 0;
while (*src != '\\0')
{
src++;
cnt++;
}
return (cnt);
}
unsigned int ft_strlcat(char *dest, char *src, unsigned size)
{
char *dest2 = dest;
unsigned int dest_len = ft_strlen(dest);
unsigned int src_len = ft_strlen(src);
while (*dest != '\\0')
{
dest++;
}
if (size >= dest_len)
{
while (*src && (size--))
{
*dest = *src;
dest++;
src++;
}
*dest = '\\0';
return (dest_len + src_len);
}
else
{
return (src_len + size);
}
}
#include <string.h>
int main(void)
{
char a[10] = "abcde";
char b[] = "asdf";
printf("%d", ft_strlcat(a, b, 11));
//printf("%d", ft_strlcat(a, b, 3));
}
수정한 코드1
슬랙에 올라온 테스트 케이스로 테스트 해 본 결과 원래 함수의 길이보다 크게 나와서 size - 1 만큼의 길이를 제외하게 되었다. 그러니까 테스트 케이스의 값과 결과가 같았다.
#include <unistd.h>
unsigned int ft_strlen(char *src)
{
unsigned int cnt;
cnt = 0;
while (src[cnt] != '\\0')
{
cnt++;
}
return (cnt);
}
unsigned int ft_strlcat(char *dest, char *src, unsigned int size)
{
unsigned int j;
unsigned int dest_len;
unsigned int src_len;
dest_len = ft_strlen(dest);
src_len = ft_strlen(src);
j = 0;
if (size == 0)
return (src_len);
while ((src[j] != '\\0') && (dest_len + j < size - 1))
{
dest[dest_len + j] = src[j];
j++;
}
dest[dest_len + j] = '\\0';
if (dest_len < size)
return (dest_len + src_len - (size - 1));
return (src_len + size);
}
/*
수정한 코드 2
알고보니 테스트 케이스가 잘 못 되었던 것 같다. 데스트를 따로 선언하고 테스트를 해 보니 원래 함수와 결과값이 다르게 나왔다. 그래서 다시 수정함. 나중에 리트 때 참고할 것.
참고로 size - 1은 size가 0이거나 1일 때 오류가 발생할 수 있어서 -1을 이항시켰다.
#include <unistd.h>
unsigned int ft_strlen(char *src)
{
unsigned int cnt;
cnt = 0;
while (src[cnt] != '\\0')
{
cnt++;
}
return (cnt);
}
unsigned int ft_strlcat(char *dest, char *src, unsigned int size)
{
unsigned int j;
unsigned int dest_len;
unsigned int src_len;
dest_len = ft_strlen(dest);
src_len = ft_strlen(src);
j = 0;
if (size == 0)
return (src_len);
while ((src[j] != '\\0') && (dest_len + j + 1 < size))
{
dest[dest_len + j] = src[j];
j++;
}
dest[dest_len + j] = '\\0';
if (dest_len < size)
return (dest_len + src_len);
return (src_len + size);
}
/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char dest[10] = "addd";
char dest2[10] = "addd";
char src[] = "add";
strlcat(dest, src, 2);
printf("%lu\\n", strlcat(dest, src, 2));
printf("%s\\n", dest);
ft_strlcat(dest2, src, 2);
printf("%d\\n", ft_strlcat(dest2, src, 2));
printf("%s\\n", dest2);
}*/
#include <unistd.h>
unsigned int ft_strlen(char *src)
{
unsigned int cnt;
cnt = 0;
while (src[cnt] != '\\0')
{
cnt++;
}
return (cnt);
}
unsigned int ft_strlcat(char *dest, char *src, unsigned int size)
{
unsigned int j;
unsigned int dest_len;
unsigned int src_len;
dest_len = ft_strlen(dest);
src_len = ft_strlen(src);
j = 0;
if (size == 0)
return (src_len);
while ((src[j] != '\\0') && (dest_len + j + 1 < size))
{
dest[dest_len + j] = src[j];
j++;
}
dest[dest_len + j] = '\\0';
if (dest_len < size)
return (dest_len + src_len);
return (src_len + size);
}