Il y a deux trois petits problèmes :
Je ne suis pas sur que l'initialisation de ton tableau caract soit bonne. I.e., je crois que tu ne mets de zéro que dans la première case du tableau et non pas dans toutes, ce qui fait qu'il faut que tu ajoute un zéro après chaque caractère que tu écris dans ton tableau si je ne me trompe pas.
Quand tu as un appuie sur basckspace, il ne faut pas mettre ' ' dans ton tableau, mais 0 (le nombre zéro) et il faut le faire à la position caract-1 (ou alors décrémenter caract avant de faire l'affectation), et il faut le faire si caract>0 et non pas >-1 (vu que tu l'initialise à 0).
Tu n'a le droit de mettre que 19 caractère dans ton tableau, car le dernier est réservé pour le 0 final, donc tes tests doivent devenir if (caract<19) ou alors, crée un tableau de taille 21 et non pas 20.
Et enfin, ta fonction TTF_RenderText_Blended écrit une chaîne de caractère et non pas un seul caractère, donc elle écrit bien n fois le caractère n car elle écrit d'abord toutes la chaines, puis tout à partir du deuxième caractère, etc. Appelle là une seule fois avec l'adresse de ta chaine (comCarte, et la variable carAct2 devient inutile).
Enfin, quand tu écrit le fichier à la fin il ne faut boucler que jusqu'à carAct (à plus ou moins 1 près), pour ne pas écrire des caractères que l'utilisateur n'a pas écrit. Ou alors utiliser une fonction du genre fprintf ou fputs (si elle existe) qui vont écrire toutes la chaines d'un seul coup.
Pour le fichier binaire, ton problème vient de ce que tu compilait ton programme en debug avant, puis que tu t'es mis à la compiler en release je pense et donc ton tableau n'est plus initialisé avec des 0 partout (alors qu'il l'est dans le cas debug je crois) ce qui fait que tu vois des caractères quelconque dedans. Mais ça n'a rien à voir avec le mode d'ouverture du fichier (qui ne change presque rien d'ailleur à ce que tu mets dans le fichier). Par contre, tu peut même ouvrir ton fichier avec "w" et non pas "w+", mais ce n'est pas important (juste parce que tu ne fait qu'ajouter des données à la fin de ton texte qui est initialement vide).