adding ft_strjoin_static
This commit is contained in:
1
Makefile
1
Makefile
@@ -54,6 +54,7 @@ SRCS = ft_memset.c \
|
|||||||
ft_strncpy.c \
|
ft_strncpy.c \
|
||||||
ft_strstr.c \
|
ft_strstr.c \
|
||||||
ft_strjoinfree.c \
|
ft_strjoinfree.c \
|
||||||
|
ft_strjoin_static.c \
|
||||||
ft_strclr.c \
|
ft_strclr.c \
|
||||||
ft_strdel.c \
|
ft_strdel.c \
|
||||||
ft_strequ.c \
|
ft_strequ.c \
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ char *ft_strdup(const char *s1);
|
|||||||
|
|
||||||
char *ft_substr(char const *s, unsigned int start, size_t len);
|
char *ft_substr(char const *s, unsigned int start, size_t len);
|
||||||
char *ft_strjoin(char const *s1, char const *s2);
|
char *ft_strjoin(char const *s1, char const *s2);
|
||||||
|
size_t ft_strjoin_static(char *dst, size_t dst_size, const char **srcs, size_t n);
|
||||||
char *ft_strtrim(char const *s1, char const *set);
|
char *ft_strtrim(char const *s1, char const *set);
|
||||||
char **ft_split(char const *s, char c);
|
char **ft_split(char const *s, char c);
|
||||||
char *ft_itoa(long int n);
|
char *ft_itoa(long int n);
|
||||||
|
|||||||
42
srcs/ft_strjoin_static.c
Normal file
42
srcs/ft_strjoin_static.c
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#include "libft.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Concatenates an array of strings into a pre-allocated destination buffer.
|
||||||
|
*
|
||||||
|
* @param dst Destination buffer.
|
||||||
|
* @param dst_size Size of the destination buffer (including space for null terminator).
|
||||||
|
* @param srcs Array of source strings to concatenate.
|
||||||
|
* @param n Number of strings in `srcs`.
|
||||||
|
* @return The total length of the concatenated string (excluding null terminator),
|
||||||
|
* or 0 if the buffer is too small.
|
||||||
|
* @note The caller must ensure `dst_size > 0`. If the buffer is too small,
|
||||||
|
* the function returns 0 and `dst` is set to an empty string.
|
||||||
|
*/
|
||||||
|
|
||||||
|
size_t ft_strjoin_static(char *dst, size_t dst_size, const char **srcs, size_t n)
|
||||||
|
{
|
||||||
|
// Calculate total length needed
|
||||||
|
size_t total_len = 0;
|
||||||
|
for (size_t i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
total_len += ft_strlen(srcs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if buffer is large enough (include space for '\0')
|
||||||
|
if (total_len + 1 > dst_size)
|
||||||
|
{
|
||||||
|
dst[0] = '\0';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy strings
|
||||||
|
char *ptr = dst;
|
||||||
|
for (size_t i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
size_t len = ft_strlen(srcs[i]);
|
||||||
|
ft_memcpy(ptr, srcs[i], len);
|
||||||
|
ptr += len;
|
||||||
|
}
|
||||||
|
*ptr = '\0';
|
||||||
|
return total_len;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user