Bonjour,
Ma demande est dans le titre,
J'ai une chaîne de caractère avec le nom du type de fichier et je voudrais pouvoir l'extraire, un exemple vaut mieux qu'un long discourt:
[image_spectro.tif] => [image_spectro]
Merci, d'avance
niko
Bonjour,
Ma demande est dans le titre,
J'ai une chaîne de caractère avec le nom du type de fichier et je voudrais pouvoir l'extraire, un exemple vaut mieux qu'un long discourt:
[image_spectro.tif] => [image_spectro]
Merci, d'avance
niko
C'est pas 'extraire', mais supprimer.
Si ce sont "les 4 derniers", il suffit de placer un 0 juste après le dernier caractère que tu gardes. (strlen() etc.)
Si c'est "supprimer l'extension si elle existe", tu utilises strrchr() avec '.' et tu places un 0 à l'endroit trouvé si il existe.
Dans tous les cas, la chaine doit être modifiable.
C'est simple. Fait de ton mieux et poste ton code.
tiens, j'espère que c'est ce que tu voulais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void) { /* Nom du fichier à couper */ char Stream[]="FileName.xxx"; /* Taille de la chaine contenant le fichier (taille => 13)*/ int StreamSize=sizeof(Stream)/sizeof(char); /* Taille du nom du fichier : .xxx => 4 caractères à supprimer (taille => 9)*/ int FileNameSize=StreamSize-4; /* On définit la variable receptrice du nom du fichier */ char *FileName; /* On alloue 9 cases mémoires nécéssaires */ FileName=malloc((FileNameSize)*sizeof(char)); /* On remplit que de ce dont on a besoin */ /* On commence à 0, donc comme on veut remplir 8 caractères il faut aller de 0~7 soit (FileName-1) strictement */ int i=0; for ( i=0 ; i<(FileNameSize-1) ; i++ ) { FileName[i] = Stream[i]; } /* On termine la chaine par \0 à la 9eme cases ( incrément n°8 ) => (FileNameSize-1) )*/ FileName[FileNameSize-1]='\0'; /* On affiche comme ça*/ int j=0; for ( j=0 ; j<(FileNameSize-1) ; j++ ) { printf("%c", FileName[j] ); } /* Ou comme ça*/ printf("\n%s", FileName); /* Taille des fichier */ printf("\n%d, %d", FileNameSize, StreamSize); getch(); }
plutôt que de te compliquer la vie, suis les conseils des anciens...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char pathname[] = "FileName.xxx"; char * extension = strrchr(pathname, '.'); if(extension != NULL) { *extension = '\0'; } puts(pathname); return 0; }
En effet, mais comme sous windows les extentions sont codées sur 3digits, je ne me suis pas posé la question.
Votre version est plus puissante je vous l'accorde, on dira que moi ça permet de revoir les classiques lol.
Partager