Есть несколько проблем с:
char file_name[80] = "filename.vce";
char *new_file_name = NULL;
new_file_name = strstr(file_name, "vce");
strncpy(new_file_name, "wav", 3);
printf("new file name: %s\n", new_file_name);
printf("file name: %s\n", file_name);
Существует только хранилище для одной строки, но в конце вы пытаетесь напечатать две разные строки.
Переменная с именем new_file_name
фактически указывает на часть того же имени файла.
Строка vce может встречаться где угодно внутри имени файла, а не только как расширение. Что если имя файла было srvce.vce
?
Вы, вероятно, хотите найти последнее. символ в строке, затем проверьте, следует ли за ним ожидаемое расширение, а затем замените это расширение. И помните, что если вы сделаете это, изменив исходный буфер, вы не сможете впоследствии распечатать старую строку.