Ваша программа имеет неопределенное поведение , так как вы пытаетесь получить доступ к элементу массива, my_strg[length]
с унифицированным значением length
.
Чтобы это исправить, переместите ваше объявление length
в после вызова scanf
и инициализируйте его длиной строки, которую scanf
читает:
scanf("%s", my_strg);
size_t length = strlen(my_strg);
В качестве альтернативы полностью сбросьте вызов scanf
и инициализируйте length
нулями:
char my_strg[MAX_SIZE] = { 0, }; // Note: make sure you ALSO initialize your array!!
printf("Please insert the string you want to reverse: ");
size_t length = 0;
while ((temp = getchar()) != '\n') {
//..
Примечание. Если вы (по какой-либо причине) не хотите инициализировать весь массив в нули (в качестве первой строки) в моем втором блоке кода это будет сделано), затем убедитесь, что в конце строки добавлен нулевой (nul
) символ, прежде чем печатать его (или делать что-либо еще с ним). Вы можете просто добавить эту строку после while
l oop:
my_strg[length] = '\0'; // "length" will already point to one-beyond-the-end
РЕДАКТИРОВАТЬ: Для решения очень хорошие замечания, сделанные Дэвид C. Rankin в разделе комментариев, вы могли (должны) улучшить свой while
l oop элемент управления, чтобы: (a) предотвратить переполнение буфера и (b) обработать условия ошибки ввода. Примерно так:
while ((length < MAXSIZE - 1) && (temp = getchar()) != '\n' && temp != EOF) {
//..
, но точные тесты и элементы управления, которые вы используете, будут зависеть от того, как вы будете sh решать такие проблемы.