C++は知らない俺の案

 string buf → char buf[1024]

としてgetlineではなくfgetsを使う。
ただしstrstr(buf,"test")とするといつまでも一個めの"test"に引っかかるので、

 char* start;
 while(...){
  if((start=strstr(buf,"test")) != NULL){
   count++;
   start++;
   //startを"test"の先頭の次、つまり'e'を指すようにして、次回同じ"test"にひっかからないようにする
  }
 }

などとする