Bonjour

J'ai un soucis ! J'ai une chaine (un chemin d'acces, en realité) et j'aimerais en extraire un nom de Process que la chaine contient. Lorsque j'utilise le code ci-dessous, l'extraction se fait bien mais il y a un "." (signe qui devient è@ sous un editeur quelconque) à la fin du nom !?! Je suppose que cela vient d'un probleme de pointeur ?
Quelqu'un peut-il m'aider sur le suejt merci !! ??

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
50
 
char *Dir;
char *MonProcess;
Dir=malloc(sizeof(char)*strlen(argv[1])); // argv[1] est du type /mnt/hda5/Monchemin/NomDuProcess/NomDuProcess  (ou NomDuProcess est un exe En C et aussi, le repertoire ou il doit se loger).
MonProcess=(char*)malloc(sizeof(char)*100);
strcpy(Dir,argv[1]);
 
int StartProcessName=strlen(Dir)-12;
int EndProcessName=strlen(Dir)-1;
 
MonProcess=str_sub(Dir,StartProcessName,EndProcessName);
 
 
 
// routine str_sub :
/**
Fonction str_sub :
------------------
Goal : This function allows a string to be extracted from another with starting and ending indexes
--------------------------------------------------------------------------------------------------
inputs : const char* s	--> target string to extract from
	 unsigned int start --> starting index 
	 unsigned int end --> ending index
outputs: char* --> the result of extraction
 
*/
 
char *str_sub (const char *s, unsigned int start, unsigned int end)
{
   char *new_s = NULL;
 
   if (s != NULL && start < end)
   {
      new_s = malloc (sizeof (*new_s) * (end - start + 2));
      if (new_s != NULL)
      {
         int i;
         for (i = start; i <= end; i++)
         {
            new_s[i-start] = s[i];
         }
      }
      else
      {
         fprintf (stderr, "Memoire insuffisante\n");
         exit (EXIT_FAILURE);
      }
   }
   return new_s;
}
resultat du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
ARGV1=/mnt/hda5/Local/Travail/VALIDATIONS/TESTS/SimCATDSProc/C1C___00_01/C1C___00_01
MonProcess=C1C___00_01�   // Il y a comme une sorte de "," a la fin qui doit venir d'un \0 j'imagine ?!
Comment faire pour recuperer "NomDeProcess" proprement en C ? (sachant qu'il a toujours la meme taille =12) ?


Merci de m'aider !
pepito