Вы должны определить, что означает getLine()
: длина .Это число символов, вставленных в массив, или количество символов, исключая '\ 0', которое завершает строку.Вот для чего нужны комментарии к коду:
int getLine(char line[])
{
int i = 0, c;
while ((c = getchar()) != EOF && c != '\n')
{
line[i++] = c;
}
line[i] = '\0';
return i; // return array length, not counting final \0
}
Какое бы решение вы ни выбрали, это не имеет смысла:
r[i++] = s[len--];
В одном случае вы бы поместили символ завершения строки '\ 0'в качестве первого символа новой строки, всегда возвращающей пустую строку, или в другом случае вы бы скопировали мусорную память в новую строку.С точки зрения массива на основе индекса 0 длина должна означать единицу после последнего индекса.Таким образом, последний элемент в массиве должен быть s[len - 1]
.Вместо того, чтобы считать len
, я советую вам рассчитывать на i
, пока он не достигнет len
:
void reverse(char r[], const char s[], size_t length)
{
int i = 0;
while (i < length)
{
r[i] = s[length - 1 - i];
i++;
}
r[i] = '\0';
}