Вкратце, вы просите scanf
сканировать строки в пространство памяти, которое вы выделите достаточно большим для нескольких целых чисел.Обратите внимание, что вашему вызову malloc присваивается количество целых чисел, а затем вы присваиваете его char *
.Эти две вещи не смешиваются, и происходит то, что вы сканируете кучу байтов в вашем буфере, который слишком мал, запускается до конца, топает чем-то другим, а затем вылетает.Компилятор позволяет вам избежать неприятностей с этим, потому что и malloc
, и scanf
предназначены для работы с различными типами (void*
), поэтому компилятор не знает, как обеспечить согласованность типов в этом случае.
Если ваша цель состоит в том, чтобы сохранить токены слов из входной строки в массив слов, вы можете сделать это, но вам нужно выделить что-то совершенно другое и управлять этим немного по-другому.
Но если ваша цель - просто создать желаемый результат, на самом деле есть более простые способы сделать это, например, использовать strtok
или просто проходить по входному символу с помощью char и отслеживать, где вы нажимаете пробелы и т. Д.