Я практикую С помощью следующего кода:заявления из цикла в то время как не работает
char* streverse(char* s){
int len=strlen(s);
int i=0; int j=len;
char* r;
while(i<j){
s[i]=s[j];
i++; j--;
}
printf("\nReverse string is %s",s);
return r;
}
Но Printf никогда не выполняет. Если я удалю:
s[i]=s[j];
printf выполняет. Это странно, потому что в то время как цикл все равно не зависит от вышеприведенного назначения. Любые подсказки, почему printf не выполняется с указанным выше присваиванием?
EDIT:
При коррекции PRINTF подписи теперь печатает.
Неопределенное поведение. –
Вы знаете, что 's [strlen (s)]' всегда является терминатором? Итак, угадайте, что происходит в самой первой итерации цикла ... –
Кроме того, запись в 'stdout' (что и делает' printf') сбрасывает буфер (т. Е. На самом деле делает запись) в новой строке. Поэтому печать единственной строки * first * в вызове 'printf' не имеет смысла. –