#include <stdio.h>
#include <assert.h>
#include <string.h>
unsigned int len(char* str)
{
unsigned int i;
i = 0;
while (str[i] != '\0')
{
i++;
}
return i;
}
unsigned int ft_strlcat(char* dest, char* src, unsigned int size)
{
unsigned int dest_len;
unsigned int src_len;
unsigned int i;
int i_len;
dest_len = len(dest);
src_len = len(src);
i = 0;
i_len = size - dest_len - 1;
if (i_len < 0)
i_len = 0;
while (i < i_len)
{
dest[dest_len + i] = src[i];
i++;
}
dest[dest_len + i] = '\0';
return dest_len + src_len;
}
int main(void)
{
char dest1[20] = "Hello, ";
char src1[] = "world!";
size_t dest_size1 = sizeof(dest1);
size_t result1 = ft_strlcat(dest1, src1, dest_size1);
assert(strcmp(dest1, "Hello, world!") == 0);
assert(result1 == 13);
char dest2[15] = "foo";
char src2[] = "bar";
size_t dest_size2 = sizeof(dest2);
size_t result2 = ft_strlcat(dest2, src2, dest_size2);
assert(strcmp(dest2, "foobar") == 0);
assert(result2 == 6);
char dest3[10] = "hello";
char src3[] = "world";
size_t dest_size3 = 5;
size_t result3 = ft_strlcat(dest3, src3, dest_size3);
assert(strcmp(dest3, "hello") == 0); // no concatenation should happen
assert(result3 == 10); // the result length if concatenation had happened
char dest4[10] = "hello";
char src4[] = "world";
size_t dest_size4 = 8;
size_t result4 = ft_strlcat(dest4, src4, dest_size4);
assert(strcmp(dest4, "hellowo") == 0); // concatenated up to buffer size - 1
assert(result4 == 10); // the result length if concatenation had happened
char dest5[10] = "test";
char src5[] = "";
size_t dest_size5 = sizeof(dest5);
size_t result5 = ft_strlcat(dest5, src5, dest_size5);
assert(strcmp(dest5, "test") == 0);
assert(result5 == 4);
char dest6[10] = "";
char src6[] = "test";
size_t dest_size6 = sizeof(dest6);
size_t result6 = ft_strlcat(dest6, src6, dest_size6);
assert(strcmp(dest6, "test") == 0);
assert(result6 == 4);
char dest7[10] = "";
char src7[] = "";
size_t dest_size7 = sizeof(dest7);
size_t result7 = ft_strlcat(dest7, src7, dest_size7);
assert(strcmp(dest7, "") == 0);
assert(result7 == 0);
char dest8[10] = "hello";
char src8[] = "world";
size_t dest_size8 = 0;
size_t result8 = ft_strlcat(dest8, src8, dest_size8);
assert(strcmp(dest8, "hello") == 0); // no change should happen
assert(result8 == 10); // the result length if concatenation had happened
char dest9[30] = "123";
char src9[] = "456789";
size_t result9 = ft_strlcat(dest9, src9, 7);
assert(strcmp(dest9, "123456") == 0); // no change should happen
assert(result9 == 9); // the result length if concatenation had happened
char dest10[30] = "123";
char src10[] = "456789";
size_t result10 = ft_strlcat(dest10, src10, 3);
assert(strcmp(dest10, "123") == 0); // no change should happen
assert(result10 == 9); // the result length if concatenation had happened
printf("All tests passed.\n");
return 0;
}
To embed this program on your website, copy the following code and paste it into your website's HTML: