Перевод двумерного массива в одномерный.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));