[C] : Extraction d'une chaine
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:
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:
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