Voici deux fonctions que j'ai écrit avec mes modestes connaissances en C...

Elles supposent une entrée sous forme de char* représentant un nom de domaine complet AVEC sous domaines. Exemple : toto.test.domaine.com, ce que j'appelerai FQDN.

Le résultat de la première fonction, getDomain, est de retourner en char* la partie "domain" du FQDN. Avec l'exemple ci-dessus, celà retournerait : domaine.com.

Le résultat de la seconde fonction, getSubDomain, est de retourner en char* la partie "sub" du FQDN. Avec l'exemple ci-dessus, celà retournerait : toto.test.

J'ai testé ces fonctions en "stand alone", à savoir dans un programme de test qui faisait appel à ces deux fonctions, mais qui ne faisait que ça. J'ai pu constater que tout marchait. Malheureusement, après avoir intégré ces deux fonctions dans mon applicatif final, je constate une sorte de brouillage (exemple : xøÔ·xøÔ·ätoto.test au lieu de toto.test).

Je suppose que j'ai du mal ecrire mon code et c'est pourquoi je me retourne vers vous pour me guider vers une version rectifiée de ces deux fonctions.

Merci par avance aux courageux qui auront lu ma situation

Voici les codes :

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
char *getSubDomain(char *FQDN) {
 
  char   domainSubNAME[2048]   = "";
  char   *outputSubDomain      = malloc(sizeof(char)*2048);
  char   buffer[2048]          = "";
  int    i                     = 0;
  int    j                     = 0;
  char * pchCount;
  char * pchMods;
 
  /* Stockage de FQDN dans un char[] nommé domainNAME */
  sprintf(domainSubNAME, "%s", FQDN);
 
  pchCount = strtok(domainSubNAME, ".");
  while (pchCount != NULL) {
    pchCount = strtok(NULL, ".");
    /* Comptage du nombre de parties dans le FQDN */
    i++;
  }
 
  /* Stockage de FQDN dans un char[] nommé domainNAME */
  sprintf(domainSubNAME, "%s", FQDN);
 
  pchMods = strtok(domainSubNAME, ".");
  while (pchMods != NULL) {
    sprintf(buffer, "%s", pchMods);
    if (j < (i-2)) {
      if (j > 0) {
        sprintf(outputSubDomain, "%s.", outputSubDomain);
      }
      sprintf(outputSubDomain, "%s%s", outputSubDomain, buffer);
    }
    pchMods = strtok(NULL, ".");
    j++;
  }
 
  return outputSubDomain;
 
}
 
char *getDomain(char *FQDN) {
 
  char   domainNAME[2048]      = "";
  char   *outputDomain         = malloc(sizeof(char)*2048);
  char   buffer[2048]          = "";
  int    i                     = 0;
  int    j                     = 0;
  char * pchCount;
  char * pchMods;
 
  /* Stockage de FQDN dans un char[] nommé domainNAME */
  sprintf(domainNAME, "%s", FQDN);
 
  pchCount = strtok(domainNAME, ".");
  while (pchCount != NULL) {
    pchCount = strtok(NULL, ".");
    /* Comptage du nombre de parties dans le FQDN */
    i++;
  }
 
  /* Stockage de FQDN dans un char[] nommé domainNAME */
  sprintf(domainNAME, "%s", FQDN);
 
  pchMods = strtok(domainNAME, ".");
  while (pchMods != NULL) {
    sprintf(buffer, "%s", pchMods);
    if (j >= (i-2)) {
      if (j > (i-2)) {
        sprintf(outputDomain, "%s.", outputDomain);
      }
      sprintf(outputDomain, "%s%s", outputDomain, buffer);
    }
    pchMods = strtok(NULL, ".");
    j++;
  }
 
  return outputDomain;
 
}