Bonjour/bonsoir à tous/toutes,
une petite question pour essayer de comprendre une différence
de comportement entre mon programme Gtk+ compilé sous Vista (Codeblocks) et sous ma bonne Fedora.
Il m'est tout d'abord important de préciser, que sous Linux comme sous Windows, je n'ai aucune erreur 'fatale' à l'exécution ... mais mais mais ...
Avant d'aller plus loin, mon programme est un programme d'analyse scientifique (dispo ici http://isaacs.sourceforge.net),
à un certain point durant l'exécution je demande l'affichage dans un Gtk_Text_View du résultat d'un calcul,
l'affichage diffère sous Win32 et Linux ... je m'excuse par avance de la longueur du texte à venir ...

1) Résultat sous Linux (affichage Ok)
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
 
Shortest path ring statistics:
 
 Average number of rings per configuration: 115.900000 +/- 24.973097
 Average number of rings with n > 20 nodes which potentially exist: 135.800000 +/- 26.469269
 n     Rc(n)    Rc[All](n)    +/-       Pn(n)       +/-       Pmax(n)     +/-       Pmin(n)     +/-
 3   0.004651   0.004651   0.003562   0.010853   0.008130   0.488095   0.155371   1.000000   0.000000
 4   0.083333   0.083333   0.015205   0.295736   0.040199   0.508681   0.075866   0.996369   0.008366
 5   0.004651   0.004651   0.002451   0.022093   0.011122   0.547619   0.082685   0.911111   0.145297
 6   0.057364   0.057364   0.013770   0.229070   0.040752   0.629735   0.067917   0.666030   0.105880
 7   0.001163   0.001163   0.002616   0.006202   0.013201   0.619048   0.067344   0.706349   0.213254
 8   0.030233   0.030233   0.007029   0.117054   0.031794   0.582700   0.110923   0.469954   0.112416
 9   0.004651   0.004651   0.005420   0.018992   0.023216   0.725725   0.200212   0.426149   0.206935
10   0.018992   0.018992   0.012318   0.066279   0.033911   0.559826   0.186853   0.344088   0.113461
11   0.001163   0.001163   0.002616   0.007752   0.016444   0.661616   0.164277   0.494949   0.071425
12   0.053101   0.053101   0.023474   0.116279   0.041060   0.666946   0.113125   0.390984   0.139641
13   0.001550   0.001550   0.003269   0.001550   0.003269   1.000000   0.000000   0.000000   0.000000
14   0.044961   0.044961   0.030311   0.069767   0.046296   0.767157   0.125960   0.284305   0.094722
15   0.012791   0.012791   0.009503   0.015891   0.015871   0.521368   0.260955   0.110256   0.216445
16   0.032171   0.032171   0.029237   0.054651   0.044248   0.648796   0.088311   0.195941   0.133427
17   0.005814   0.005814   0.007806   0.005814   0.007589   0.866667   0.217307   0.000000   0.000000
18   0.056977   0.056977   0.041103   0.026744   0.020627   0.878171   0.153111   0.039583   0.098214
19   0.008915   0.008915   0.010971   0.007752   0.015504   0.933333   0.149071   0.107692   0.215385
20   0.026744   0.026744   0.014894   0.045736   0.030943   1.000000   0.000000   0.280113   0.123251
1) Résultat sous Win32 (affichage pas Ok du tout)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Shortest path ring statistics:
 
 Average number of rings per configuration: 115.900000 +/- 24.973097
 Average number of rings with n > 20 nodes which potentially exist: 135.800000 +/- 26.469269
 n     Rc(n)    Rc[All](n)    +/-       Pn(n)       +/-       Pmax(n)     +/-       Pmin(n)     +/-
 3   0.004651   0.004651   0.003562   0.010853   0.008130   0.488095   0.155371   1.000000   0.000000
 4   0.083333   0.083333   0.015205   0.295736   0.040199   0.508681   0.075866   0.996369   0.008366
 5   0.004651   0.004651   0.002451   0.022093   0.011122   0.547619   0.082685   0.911111   0.145297
 6   0.057364   0.057364   0.013770   0.229070   0.040752   0.629735   0.067917   0.666030   0.105880
 7   0.001163   0.001163   0.002616   0.006202   0.013201   0.619048   0.067344   0.706349   0.213254
 8   0.030233   0.030233   0.007029   0.117054   0.031794   0.582700   0.110923   0.469954   0.112416
 9   0.004651   0.004651   0.005420   0.018992   0.023216   0.725725   0.200212   0.426149   0.206935
10   0.018992
Pour faire simple sous Win32 de nombreuses informations qui devraient être affichées ne le sont pas (arrêt de l'affichage à la 10 ligne sur 20 ... )
et je ne sais pas pourquoi ... voici mon code (je l'ai raccourci un peu pour ce message)

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
void printrings_ (int * idnodes,  int * nodes, double nc[ringsize*2], double pna[ringsize*2],
                 double rmax[ringsize*2], double rmin[ringsize*2],
                 double ectrc[ringsize*2], double ectpna[ringsize*2],
                 double ectmax[ringsize*2], double ectmin[ringsize*2],
                 double * rpstep, double * ectrpst, double * nampat, double * ectampat)
{
  int i, j;
  char * value;
  char * nelt;
  char ra[22]=" n     Rc(n)    Rc[";
  char rb[36]="](n)   Pn(n)     Pmax(n)    Pmin(n)";
  char rc[78]="](n)    +/-       Pn(n)       +/-       Pmax(n)     +/-       Pmin(n)     +/-";
  char re[20]=" ring statistics:\n";
  char rf[4]="   ";
  char rg[2]=" ";
  char rh[35]=" Average number of rings with n > ";
  char ri[33]=" nodes which potentially exist: ";
  char rj[6]=" +/- ";
  char rk[45]=" Average number of rings per configuration: ";
  char rd[42]=" * only ABAB rings have been considered\n";
  char rl[47]=" * homopolar bonds can not shorten the rings\n";
  GtkWidget * info;
  GtkTextBuffer * buffer = NULL;
  GtkTextIter bStart;
  GtkTextIter bEnd;
  size_t rtot=10;
  char * ritot;
  char * tritot;
 
  j = * idnodes;
  j = j-1;
  rtot+=strlen(retl);
// un grand passage dans lequel je prépare la taille de mémoire à allouer ..
// une fois cela fait j'alloue la mémoire nécessaire ...
  ritot = g_malloc(rtot*sizeof*ritot);
/// puis je copie le tout dans ma chaine de caractères 
  strcpy(ritot,retl);
  strcat(ritot,trc[search]);
 ...
// Enfin je veux afficher le tout, en prenant des précautions
  tritot = g_malloc(rtot*sizeof*tritot);
#ifdef G_OS_WIN32
  wsprintf (tritot, "%s", ritot);
#else
  snprintf (tritot, rtot, "%s", ritot);
#endif
  g_free(ritot);
  g_print("%s", tritot);
  info = (GtkWidget *) gtk_builder_get_object (BuilderGtk, "TextInfo");
  buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(info));
  gtk_text_buffer_get_start_iter (buffer, &bStart);
  gtk_text_buffer_get_end_iter (buffer, &bEnd);
  gtk_text_buffer_insert (buffer, &bEnd, tritot, -1);
  gtk_text_view_set_buffer (GTK_TEXT_VIEW(info), buffer);
  g_free(tritot);
}
Le code précédent, plus précisément la partie finale donne les résultats présentés plus haut respectivement sous Linux et Win32.

Il m'est possible de corriger le tire et d'obtenir un affichage correct sous Win32 avec les changements suivants:
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
 
//  tritot = g_malloc(rtot*sizeof*tritot);
//#ifdef G_OS_WIN32
//  wsprintf (tritot, "%s", ritot);
//#else
//  snprintf (tritot, rtot, "%s", ritot);
//#endif
//  g_free(ritot);
  g_print("%s", ritot);
  info = (GtkWidget *) gtk_builder_get_object (BuilderGtk, "TextInfo");
  buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(info));
  gtk_text_buffer_get_start_iter (buffer, &bStart);
  gtk_text_buffer_get_end_iter (buffer, &bEnd);
  gtk_text_buffer_insert (buffer, &bEnd, ritot, -1);
  gtk_text_view_set_buffer (GTK_TEXT_VIEW(info), buffer);
  g_free(ritot);
Toutes vos lumières sont les bienvenues, je ne suis pas un grand programmeur et j'aimerais bien comprendre le pourquoi du comment ... merci d'avance !