Упорядочить слова по алфавиту

Программа должна принимать на вход предложение и выводить его слова в алфавитном порядке. У меня была реализация, когда слова передавались как просто аргументы массива, но после того как я попытался реализовать ввод предложения с клавиатуры, у меня стало вылазить Segmentation fault (core dumped), после ввода самого предложения. В чем моя ошибка? Кто откликнулся, заранее спасибо

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

void sort_words(char *words[], int count)
{
    char *x;

    for (int i = 0; i < count; i++)
    {
        for (int j = i + 1; j < count; j++)
        {
            if (strcmp(words[i], words[j]) > 0)
            {
                x = words[j];
                words[j] = words[i];
                words[i] = x;
            }
        }
    }
}


int main()
{
    char *words[4];
    printf("Введите 5 слов \n");
    scanf("%s%s%s%s%s", &words);

    sort_words(words, 5);

    for (int i = 0; i < 5; i++)
    {
        printf("%s", words[i]);
    }
    printf ("\n");
} 

P.S. формат %s не подходит, но и ошибку не вызывает. Нужный мне не нашел, буду благодарен за подсказку


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

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

Выделять можно память для строк в общей памяти с помощью malloc, я пока предлагаю ограничиться просто массивом строк. Копировать строки с помощью = не получиться, вы просто копируете адреса строк. Нужно использовать функции для копирования строк strcpy. Я поменял аргумент , чтобы он принимал указатель на массив, вместо вектора, исправил на правильное копирование строк.

// gcc -Wall -Wextra -Wpedantic -std=c11 scanstr.c -o scanstr

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

void sort_words(int count,char words[count][120])
{
    char x[120];

    for (int i = 0; i < count; i++)
    {
        for (int j = i + 1; j < count; j++)
        {
            if (strcmp(words[i], words[j]) > 0)
            {
              strncpy(x,words[j],120);
              strncpy(words[j],words[i],120);
              strncpy(words[i],x,120);
            }
        }
    }
}


int main()
{
    char words[5][120];
    printf("Введите 5 слов \n");
    for(int i = 0;i<5;++i)
      scanf("%120s", words[i]);

    sort_words(5,words);
    printf("--sorted--\n");
    for (int i = 0; i < 5; i++)
    {
        printf("%s\n", words[i]);
    }
    printf ("\n");
} 
→ Ссылка