So my program is suppose to change 3 run-on spaces from an input into a single tab in the output. If it comes across 2 spaces, it will replicate the 2 spaces. If it comes across 4 spaces, it will change the 3 spaces into a tab and then output the single leftover space. As of right now my program does funny stuff when it runs into a space...I am unsure where I am doing it wrong. Maybe you guys can help me find out my place(s) of error. Thank you

Code:
#include <stdio.h>
#define MAXLINE 1000
#define TAB 3

int getline(char line[]);
void copy(char to[], char from[]);

//prints out a line with 3 spaces replaced by tabs
//spaces of 2 or 1 between other letters or number
//will remain the same

main(){
	int len; //current line length
    char spaced[MAXLINE]; //current input line
	char tabbed[MAXLINE]; //detabbed line saved here
	
	len = 0;

	while ((len = getline(spaced)) > 0){
			copy(tabbed, spaced);
			printf("%s", tabbed);
		}
		return 0;
	}

//read a line into s, return length
int getline(char s[]){
	int c, i;

	for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
		s[i] = c;
	if(c == '\n'){
		s[i] = c;
		++i;
		}
	s[i] = '\0';
	return i;
	}

//copy from into to: assume to is big enough
//replaces continuous tabs with 3 spaces
void copy(char to[], char from[]){
	int i, i2, tmp, tmp2, x;

	i = 0;
	i2 = 0;
	tmp = 0;
	
	//while from[i2] is not equal to end of line
	while (from[i2] != '\0'){

		//if from[i2] is equal to a blank
		//add 1 to tmp
		if (from[i2] == ' '){
			++tmp;
			//if tmp is ever equal to 3
			//set to[i] to become a tab
			//reset t
			if (tmp == 3){
				to[i] = '\t';
				tmp = 0;
				}
			}
	
		//else if from[i2] is not a blank
		else if (from[i2] != ' '){
			//if tmp is equal to 2
			//set to[i] and to[i+1]
			//to be blanks
			if (tmp == 2){
				tmp = 0;
				for(x = 0; x != 2; ++x){
					to[i] = ' ';
					++i;
					}
				to[i] = from[i2];
				}
			//if tmp is equal to 1
			//set to[i] to be blanks
			else if (tmp == 1){
				tmp = 0;
				to[i] = ' ';
				++i;
				to[i] = from[i2];
				}
			//otherwise copy from[i2]
			//to to[i] as normal
			else to[i] = from[i2];
			}

		++i;
		++i2;
		}
	to[i] = '\0';
	}