Hello,
Je suis programmeuse, plutôt anglophone ( oui je ne suis pas parfaite ) en C, j'ai des notions de base.
J'ai quelques soucis avec le "return" d'un string ou d'un tableau depuis une function.
Pour donner un exemple, je tente de simuler en C la function MID$ du basic.
Pour remémorer, on a:
Code BASIC : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 string_2$ = MID$( string_1$, start% [, NBytes% ] ) function .BASIC MID$( string_1$, start% [, NBytes% ] ) = string_2$ statement .BASIC
Je laisse de côté la variante "statement" qui ne m'intéresse pas.
Si j'utilise ( sans options ):
Code C : Sélectionner tout - Visualiser dans une fenêtre à part void MID( const char * string_1, char * string_2, int start, int NBytes );
Je récupère le résultat string_2 extrait du string_1.
Pas de souci. Cela me semble propre.
Si je veux copier le style MID$, cela se complique...
Un exemple ( retourne le jour de la semaine ):
Pour le moment, pas de problème.
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 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void MID( const char * string_1, char * string_2, int start, int NBytes ) /* char * MID( const char * string_1, int start, int NBytes ) */ { /* => string_2 */ int k = 0, l = 0; for( k = start; k < (start + NBytes); k++ ) { string_2[l] = string_1[k ]; l++; } string_2[l] = '\0'; } int main() { char buf[64] = "SUNMONTUEWEDTHUFRISAT"; char buf2[64] = "....................."; int i; for ( i = 0; i < 7; i++ ) { MID( buf, buf2, 3 * i, 3); printf( "%i => %s\n", i, buf2 ); } return 0; }
Mais si je veux utiliser la fonction en tant que:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part const char *MID(...
avec un
Code C : Sélectionner tout - Visualiser dans une fenêtre à part return string_2;
cela cafouille.
Pas très étonnée, string_2 est un... string ! pas une variable.
Mais si je veux mettre un
Code C : Sélectionner tout - Visualiser dans une fenêtre à part return "ABCDEF";
cela fonctionne mais ce n'est pas le string_2 voulu !
Un pointer... Pas trouvé comment faire ( si c'est possible ). À moins d'utiliser des string en global mais pas joli !
Pourquoi cela fonctionne avec un string explicite et pas la variable correspondant au string ?
La méthode bourrin utilisant getc et transférer lettre par lettre... Pas chaude du tout ( et vu la canicule... ).
Bien sûr, je peux renoncer à la forme "function", mais j'aime comprendre.
Mon but est d'aller plus loin dans l'exploitation de MID pour traiter des 1000-3000 lignes de données en ASCII dans un file séparé combinant diverses sortes de valeurs, int, double, char. De coder en préliminaire les doubles du fichier source en 8 bytes IEEE à décoder ensuite en double en lecture.
Merci pour vos idées.






Répondre avec citation
Partager