#include <stdio.h>
#include <assert.h>
#include <string.h>

unsigned int len(char* str)
{
	int		i;

	i = 0;
	while (str[i] != '\0')
	{
		i++;
	}

	return i;
}

unsigned int cal_i_len(unsigned int nb, unsigned int src_len)
{
	if (nb > src_len)
	{
		return src_len;
	}
	return nb;
}


char* ft_strncat(char* dest, char* src, unsigned int nb)
{
	unsigned int		i;
	unsigned int		i_len;
	unsigned int		src_len;
	unsigned int		dest_len;
	
	src_len = len(src);
	dest_len = len(dest);
	i_len = cal_i_len(nb, src_len);
	i = 0;
	
	while (i < i_len)
	{
		dest[dest_len + i] = src[i];
		i++;
	}
	dest[dest_len + i] = '\0';
	return dest;
}

int main(void)
{
    // Test Case 1: Normal concatenation
    char dest1[20] = "Hello, ";
    char src1[] = "world!";
    size_t n1 = 6; // Maximum 6 characters from src1
    ft_strncat(dest1, src1, n1);
    assert(strcmp(dest1, "Hello, world!") == 0);

    // Test Case 2: Source string completely fits
    char dest2[15] = "Foo";
    char src2[] = "Bar";
    size_t n2 = 3; // Maximum 3 characters from src2
    ft_strncat(dest2, src2, n2);
    assert(strcmp(dest2, "FooBar") == 0);

    // Test Case 3: Buffer size exactly matches destination length
    char dest3[10] = "Hello";
    char src3[] = "World";
    size_t n3 = 1; // Maximum 1 character from src3
    ft_strncat(dest3, src3, n3);
    assert(strcmp(dest3, "HelloW") == 0);

    // Test Case 4: Buffer size too small to hold concatenated string
    char dest4[10] = "Hello";
    char src4[] = "World";
    size_t n4 = 4; // Maximum 4 characters from src4
    ft_strncat(dest4, src4, n4);
    assert(strcmp(dest4, "HelloWorl") == 0);

    // Test Case 5: Empty source string
    char dest5[10] = "Test";
    char src5[] = "";
    size_t n5 = 3; // Maximum 3 characters from src5
    ft_strncat(dest5, src5, n5);
    assert(strcmp(dest5, "Test") == 0);

    // Test Case 6: Empty destination string
    char dest6[10] = "";
    char src6[] = "Test";
    size_t n6 = 4; // Maximum 4 characters from src6
    ft_strncat(dest6, src6, n6);
    assert(strcmp(dest6, "Test") == 0);

    // Test Case 7: Empty destination and source strings
    char dest7[10] = "";
    char src7[] = "";
    size_t n7 = 2; // Maximum 2 characters from src7
    ft_strncat(dest7, src7, n7);
    assert(strcmp(dest7, "") == 0);

    // Test Case 8: Destination buffer size is zero
    char dest8[10] = "Hello";
    char src8[] = "World";
    size_t n8 = 0; // Maximum 0 characters from src8
    ft_strncat(dest8, src8, n8);
    assert(strcmp(dest8, "Hello") == 0); // No change should happen

    printf("All tests passed.\n");
	return 0;
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: