Упорядочить слова по алфавиту
Программа должна принимать на вход предложение и выводить его слова в алфавитном порядке. У меня была реализация, когда слова передавались как просто аргументы массива, но после того как я попытался реализовать ввод предложения с клавиатуры, у меня стало вылазить 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 шт):
Выделять можно память для строк в общей памяти с помощью 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");
}