No sbagli il tipo di apertura. Quando apri un file in scrittura, se esso non esiste viene creato automaticamente!
Basta fare:
FILE *fp;
fp = fopen("pippo.txt","w"); //giusto
fp = fopen("pippo.txt","wb+"); //sbagliato
Le opzioni che puoi mettere al posto di "w" sono solo "r" per la lettura e "a" (append) per la scrittura ma senza la cancellazione di cioè che era già scritto nel file.
E non so, ma non credo che la if serva a qualcosa..
if(fp == NULL) printf("error\n"); //non serve