Я написал программу C, чтобы перевернуть строку с помощью указателей, проблема, с которой я столкнулся, заключается в том, что я не могу принять строку без использования циклов. Ни полная печать строки, ни печать только одного символа.
Я пытался использовать циклы для доступа к строке, и он отлично работает, но я не собираюсь этого делать.
#include<stdio.h>
int main()
{
char s[10];
char temp;
scanf("%s", s);
char *start=s;
char *end=s;
while(*end!='\0')
{
end++;
}
end--;
while(start<end)
{
temp=*start;
*start=*end;
*end=temp;
}
printf("%s", s);
}





Проблема в том, что вы никогда не уменьшаете указатель end и не увеличиваете указатель start во втором цикле.
Пытаться
while (start < end)
{
temp = *start;
*start++ = *end;
*end-- = temp;
}
С другой стороны, у вас могут возникнуть проблемы, если пользователь ничего не набирает, используя ваш подход.
while (*end != '\0')
{
end++;
}
end--; // UB when strlen(s) = 0
переключиться на
if (*end != 0)
{
end += strlen(s) - 1;
}
Кроме того, рекомендуется ограничить длину строки при использовании scanf, чтобы избежать переполнения буфера:
scanf("%9s", s);
Помните, что последний элемент массива
chars— это\0, а вы не хочу перемещать этот элемент. Другими словами, если вы вводите строку из 9 (девяти) символов,s[9] == '\0'и, следовательно, вы хотите поменять местами элементы вsтолько с 0 (ноль) на 8 (восемь).