Witzig, ich habe ein ganz ähnliches Problem. Meine Lösung - entstanden durch "kreativen" Umgang mit einem Tutorial -- in C (bzw. GTK) sieht bisher so aus:

Code:
/* Datei-Extension löschen */

#include <stdio.h>
#include <string.h>
#include <gtk/gtk.h>

int main(void)
{
	gchar *loc;
	gchar *basic_string;
	gchar *old_string = "Eine.weitere.Datei.tex";
	gsize n;

	/* Suchen und kopieren */

	loc = g_strrstr(old_string, ".");

	n = (gsize)(loc-old_string);

	basic_string = g_strndup(old_string, n);
	
	/* Ergebnisse. */
	if ( loc == NULL ) {
		printf("Das Zeichen . wurde nicht gefunden.\n");
	} else {
		printf("Das Zeichen . wurde an der Position %d gefunden.\n", n);
		printf("Der alte String lautet: %s\n", old_string);
		printf("Der neue String lautet: %s\n", basic_string);
		g_free(basic_string);
	}
	
	return(0);
}
Meine zentrale Frage ist aber eigentlich: Geht das noch kürzer - sprich: kann man die drei Zuweisungen in der Mitte noch weiter reduzieren? Und vor allem: Woher kommt die Bezeichnung "loc-old_string"?