Перевод двумерного массива в одномерный.Segmentation fault. Cи

Задача:реализовать функцию которая принимает двумерный массив и возвращает указатель на одномерный, вылазит сиг фолт, помогите разобраться

char    *ft_strjoin(char **strs)
{
    int i = 0;
    int j = 0;
    int k = 0;
    char *final = (char*)malloc(sizeof(char)*10);
    if (final == ((void *)0))
        return((void *)0);
    while (strs[i])
    {
        j=0;
        while (strs[i][j])
        {
            final[k]=strs[i][j];
            j++;
            k++;
        }
        i++;
    }
    return(final);
}

int main()
{
    char a[] = "ab";
    char b[] = "cd";
    char c[] = "efd";
    char *mass[]={a,b,c};
    printf("this is final %s\n",ft_strjoin(mass));
    return(0);
}


Ответы (1 шт):

Автор решения: AlexGlebe

При передаче массива указателем на первый элемент нужно передавать размер как аргумент. Вы смотрите до нулевого указателя :

while (strs[i])

А там может быть и не он в конце, а будет только неопределённое поведение из-за выхода за пределы массива. Вот правильный пример :

char    *ft_strjoin(int n , char **strs) {
  ...
  while (i < n)

и вызов :

printf("this is final %s\n",ft_strjoin(sizeof(mass)/sizeof(mass[0]),mass));

  
→ Ссылка