I wrote a function that copies an array in reverse order
Here:
void reverse(char to[], char from[], int size)
{
    int i;
    i = 0;
    // Copy all the characters before the null character into 'to'. i ends at size-1 for the null character
    while ((to[i] = from[(size-1)-i]))
        ++i;
}
Looking at it again after sometime I noticed that at some point from[-1] in the condition is evaluated. But for some reason my code still works?
I know that there should be junk values here but I want to know why my code "just works" no matter the input. When looking at it through a debugger I still only get '\0' when from[-1] is evaluated. In the end my reverse string is always null terminated lol
I know I can just add to[i] = '\0' to the end to be certain that it's always null terminated but having it this way hasn't caused any issues
This is the code I use it in
#include <stdio.h>
#define MAXLINE 1000
int megetline(char s[],int lim);
void reverse(char to[], char from[], int size);
/* This program reverses it's input a line at a time */
int main()
{
    int len;
    char line[MAXLINE], r_str[MAXLINE];
    while ((len = megetline(line, MAXLINE)) > 0) {
        reverse(r_str, line, len);
        printf("%s", r_str);
    }
    return 0;
}
/* Best time: 0.000070 secs */
int megetline(char s[],int lim)
{
    int c, i;
    for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}
void reverse(char to[], char from[], int size)
{
    int i;
    i = 0;
    // Copy all the characters before the null character into 'to'. i ends at size-1 for the null character
    while ((to[i] = from[(size-1)-i]))
        ++i;
}
Your thoughts are greatly appreciated.
 
    