Это действительно странный код с неопределенным поведением. Что вы ожидаете от этого:
int n; // No value!
int str[n];
Что делать? Вы получаете массив, длина которого неизвестна, поскольку n
не имеет значения в точке объявления str
.
Если вы ожидали, что компилятор для «путешествия во времени» назад к str[n]
линии волшебно, когда n
дается значение по scanf()
, то ... это не то, как работает Co, и вы должны действительно читать на языке а немного более. И скомпилируйте с все предупреждения, которые вы можете получить из своей среды.
В качестве дополнительных деталей, даже если это было закреплены так, чтобы n
имели значение, for
цикла перерасхода массив и дает неопределенное поведение снова.
Для массива размера m
, заголовок цикла следует читать
for (size_t i = 0; i < m; ++i)
Поскольку индексация 0 на основе, вы не индекса в m
может, это за пределами массива.
C является обязательным языком программирования, а не декларативным. Это означает, что ваша программа выполняется по строкам. Вы не можете объявить массив, который будет автоматически обновлять свой размер при изменении 'n', вы можете объявить массив с размером, который находится в' n' **, в точке объявления **. – StoryTeller
Вопрос: (i) хорошо написанный, (ii) содержит короткий компилируемый код, (iii) фактический выпуск документов, (iv) ожидаемый вывод документов. И два установленных пользователя предоставили хорошие ответы, что добавляет больше доверия к вопросу. Так почему же downvote? – Bathsheba
@ Батшеба, возможно, потому, что это вопрос, который показывает, что он не получил «базовую концепцию» C, и поэтому это плохой вопрос, и он плохой человек;) –