c언어 파일에서 불러온 문자열 배열에 대입에 대하여 질문있습니다!

jhh1117의 이미지

int main( void)
{
   FILE      *fp_sour;
   char      *buf;
   int        buf_size;
   int i = 0;
   int j = 0;
   int k = 0;
   char *temp;
   element e;							//저장할 구조체
 
   buf_size = 1024;
   temp = malloc((char*)sizeof(char));
 
   if (fp_sour = fopen("test.txt", "r"))
   {
	   buf   = malloc( buf_size+5);
	   while(fgets(buf, buf_size, fp_sour)){
		   for(i = 0;i<strlen(buf);i++){
			   if(buf[i] == ' ' || buf[i] == '\n'){
				   temp[j] = ' ';
				   printf("temp %s \n", temp);
				   j = 0;
				   e.word = temp;
			   }
			   else{
				   temp[j] = buf[i];
				   j++;
			   }
		   }
	   }
	   temp[j] = '\n';
	   printf("temp %s\n", temp);
	   e.word = temp;
   }
   return 0;
}

test파일에 있는 모든 문자열을 띄어쓰기 단위로 temp에 저장 했다가 제가 지정한 순서대로 element.word에 넣으려고 합니다.
예를 들어 txt파일이

aaa bbb ccc ddd
eee fffff gggg hhhh

이런식으로 있을 때 띄어쓰기 단위로 단어를 추출하려고 하는데
단어의 길이가 15자 이내라면 가능한데 그 이상이 넘어 갈경우에는 오류가 뜹니다ㅠㅠ
아무래도 동적할당을 문자길이마다 다르게 줘야 할꺼 같은데 사용법을 잘 모르겠습니다...

혹시 제가 쓴 방법외에 다른방법이 있는지도 궁금합니다! 실행시간이 짧아지는게 목표입니다.