IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

stm32 : utiliser une fonte et les infos de cette fonte


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut stm32 : utiliser une fonte et les infos de cette fonte
    Bonjour à tous,

    J'aimerais me créer un petit driver pour piloter un écran et écrire du texte.
    Pour le texte, j'utilise un logiciel qui me fait des fontes (dot factory). Il me sort deux tableaux par fonte.

    Un premier tableau avec les données précises qui composent les caractères de la fonte, dont voici un morceau en guise d'exemple :

    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
    //##############################################################################################
    //
    //  Font data for Microsoft Sans Serif 10pt
    //
     
    // Character bitmaps for Microsoft Sans Serif 10pt
    const uint8_t microsoftSansSerif_10pt[] =
    {
    	// @0 '!' (1 pixels wide)
    	//
    	// #
    	// #
    	// #
    	// #
    	// #
    	// #
    	// #
    	// #
    	//
    	// #
    	//
    	//
    	//
    	0xFE,
    	0x05,
     
    	// @2 '"' (3 pixels wide)
    	//
    	// # #
    	// # #
    	// # #
    	// # #
    	//
    	//
    	//
    	//
    	//
    	//
    	//
    	//
    	//
    	0x1E, 0x00, 0x1E,
    	0x00, 0x00, 0x00,
     
    	// @8 '#' (7 pixels wide)
    il me sort ensuite un second tableau avec toutes les infos nécessaires pour accéder à mes caractères. Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Character descriptors for Microsoft Sans Serif 10pt
    // { [Char width in bits], [Char height in bits], [Offset into microsoftSansSerif_10ptCharBitmaps in bytes] }
    const uint32_t INFO_microsoftSansSerif_10pt[96][3] =
    {
    	{1, 14, 0}, 		// !
    	{3, 14, 2}, 		// "
    	{7, 14, 8}, 		// #
    	{5, 14, 22}, 		// $
    	{10, 14, 32}, 		// %
    	{7, 14, 52}, 		// &
    	{1, 14, 66}, 		// '
    	{3, 14, 68}, 		// (
    	{3, 14, 74}, 		// )
    Ces deux tableaux, je les place dans un fichier font.c et je les déclare dans un fichier font.h.

    Ensuite j'ai un fichier driver.c pour créer mes fonctions afin d'aller lire ce tableau et d’afficher mes caractères. C'est là où les problèmes commencent. Mes notions avec les pointeurs ne sont pas très solides ! et j'ai besoin de compétences.

    Dans ce fichier driver.c, j'aimerais réussir à créer une fonction qui s'adapte à toutes les fontes que je lui indique en argument.

    Voici où j'en suis, mais ça ne fonctionne pas. Je pense que je m'y prend mal dans mes passage d'argument.
    Cette fonction est censé recevoir les coordonnées à l'écran en x et y pas de souci de ce coté la.
    Puis de recevoir le nom de la font
    puis le nom du tableau d'info

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void st7567_Write_Text(uint8_t x, uint8_t y, char* str, char* Font, char* Info)
    {
     
    		while ( *str )  // j'écris tant que le byte n'est pas null
    	{
     
    			Draw_text(x,y,*str++, Font);  // j’incrémente juste après avoir envoyé le str;
    		x = Info[0][0];
    		x = x-33;
     
    		x += Info[*str-33][0]+2;
    	}
    }
    Et ensuite j'ai un main.c qui vient appeler ces fonctions en leurs fournissant les arguments nécessaires.

    J'aimerais créer une fonction de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Write_Text(0, 24,"developpez.net",&microsoftSansSerif_10pt, &INFO_microsoftSansSerif_10pt);
    Je fournis la position en x et y .
    Puis le nom de la fonte et le nom du tableau des informations.

    Je précise que la fonction Draw_text fonctionne bien ? J'arrive bien à afficher du texte mais en écrivant le nom de la fonte en dur. Moi, je voudrais la passer en argument pour pouvoir la modifier facilement.

    Merci de m'avoir lu !

  2. #2
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 477
    Points : 4 676
    Points
    4 676
    Par défaut
    Bonjour,

    uint32_t pour les info de fontes ? uint16_ devrait suffire. On pourrait aussi discuter sur l'usage d'un tableau à 2 dimensions au lieu d'un tableau sur une structure Lx, Ly, Offset plus explicite.

    La fonction Draw_text(x,y,*str++, Font); ne semble pas utiliser les infos de fontes pourtant indispensables. Elles doivent donc lui être communiquée ailleurs. Si c'est le cas, ne changer que la fonte sans les infos afférentes (voir st7567_Write_Text) doit faire un joli pataquès.

    Salutations

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Guesset Voir le message
    uint32_t pour les info de fontes ? uint16_ devrait suffire.
    Oui c'est vrai. J'avais prévue très large.

    Citation Envoyé par Guesset Voir le message
    On pourrait aussi discuter sur l'usage d'un tableau à 2 dimensions au lieu d'un tableau sur une structure Lx, Ly, Offset plus explicite.
    Je suis ouvert à la discussion ! En fait J'aurais aimé garder les informations que me fournit le logiciel de création de font . Mais si il faut que je manipule des données ou créer une structure pourquoi pas . Je ne suis pas trés fort la dedans, mais j'ai vu des bouts code avec cette facon de faire.


    Citation Envoyé par Guesset Voir le message
    La fonction Draw_text(x,y,*str++, Font); ne semble pas utiliser les infos de fontes pourtant indispensables. Elles doivent donc lui être communiquée ailleurs. Si c'est le cas, ne changer que la fonte sans les infos afférentes (voir st7567_Write_Text) doit faire un joli pataquès.
    La fonction Draw_text(x,y,*str++, Font) utilise les Info de la font mais en dur ( pour le moment). Justement je cherche à enlever ces informations ecrites en dur. Alors j'ai commencer par la Font, et maintenant j'essaye les infos mais sans succès.


    J'ai tellement essayé de truc que je ne sais plus trop quoi faire.


    J'ai lu aussi que certains font un fichier .c par font ? est ce utile dans mon cas ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 477
    Points : 4 676
    Points
    4 676
    Par défaut
    Bonjour dje8269,

    Citation Envoyé par dje8269 Voir le message
    ...Mais si il faut que je manipule des données ou créer une structure pourquoi pas . Je ne suis pas trés fort la dedans, mais j'ai vu des bouts code avec cette façon de faire...
    Ce n'est pas indispensable mais plus lisible et pratique. Par ailleurs, cela permet de limiter la taille prise car chaque champ peut prendre une taille qui lui est propre. Ici 4 octets contre les 12 octets initiaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef struct Info_t { uint8_t Lx, Ly; uint16_t index;};
    Info_t Infos[96];
    L'initialisation reste la même. Utilisation : Info[i][0] -> Infos[i].Lx, Info[i][1] -> Infos[i].Ly, Info[i][2] -> Infos[i].index.

    Il y aurait aussi la possibilité de remplacer le champ index par un uint8_t *p = font+i. Mais il faut initialiser différemment le tableau dans une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i = 0, n = 0; n < 96; n++,  i += Infos[n].Lx*(( Infos[n].Ly+7) >> 3)  Infos[n].p = font + i;
    L'avantage est que Draw_Text (qui devrait plutôt s'appeler Draw_Car) n'utilise que Infos.

    Remarque : le tableau de fonte est sans dimension, il peut donc comporter moins de caractères décrits que 96. Attention les dégâts !

    ...J'ai tellement essayé de trucs que je ne sais plus trop quoi faire...
    Sans code plus conséquent personne ne pourra aider. Par exemple le code qui montre comment Draw_Text utilise les infos de fontes.

    J'ai lu aussi que certains font un fichier .c par font ? est ce utile dans mon cas ?
    C'est pratiquement ce qui est fait ici. L'isolation dans des fichiers dédié facilite juste une réutilisation dans d'autres projets, et évite un encombrement écran avec de nombreuse lignes d'initialisations assez peu intéressantes.

    Salut

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour à tous,

    Bon a faorce de travail et de test j'ai fini par réussir.

    Ma comprehension des pointeurs s'en trouve améliorer mais pas encore fluide. J'a idéjà compris que l"*" sert à declarer un pointeur, mais aussi à lire la valeur qui est pointé si il est collé à la variable. c'est déjà un pas de géant !

    Voici ma fonction du coup complete : Attention ca pique les yeux. je pense que c'est améliorable mais bon ca focntionne parfaitement en l'état.

    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     st7567_Write_Text(20, 7,"Abcde 123",microsoftSansSerif_10pt, INFO_microsoftSansSerif_10pt);
    driver.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void st7567_Write_Text(uint8_t, uint8_t , char *, uint8_t *, int *);
    font.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    extern uint8_t microsoftSansSerif_10pt[];
    extern uint32_t INFO_microsoftSansSerif_10pt[96][3];
     
    extern uint8_t microsoftSansSerif_18pt[];
    extern uint32_t INFO_microsoftSansSerif_18pt[][3];
    font.c contient les données de la font et les infos

    Driver.c
    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
    void st7567_Write_Text(uint8_t x, uint8_t y, char* str, uint8_t* Font, int* Info)
    {
     
    	uint32_t Width = 0;
    	uint32_t Height = 0;
    	uint8_t caract = 0;
    	uint8_t Retenue = 0;
    	uint16_t temporaire = 0;
    	uint32_t Start_Char=0;				// Indique l'adresse de depart du caractère dans le tableau
    	uint8_t Start_page = 0 ;			// indique la page de départ
    	uint8_t Offset_Y =0 ;				// calcul l'offset par rapport à la page de départ
    	uint8_t Offset_X = 0;				// Créer le décalage entre chaque caractère
     
    	while ( *str )  // j'écris tant que le byte n'est pas null
    	{
    		caract = *str - 32;					// La place du caractere dans le tableau
    		Width = *(Info + (caract*3));		// Largeur du caractere dans le tableau
    		Height = *(Info + (caract*3)+1);	// hautreur du caractere dans le tableau
    		Start_Char = *(Info + (caract*3)+2);	// l'endroti ou commence le caractere dans le tableau
     
    		Start_page = y / 8 ;			// indique la page de départ
    		Offset_Y = y % 8 ;				// calcul l'offset par rapport à la page de départ
     
     
    		//---- Ici je doit detecter si avec l'offset je dois rajouter ou non une page
    		uint8_t Nbe_of_page_Char = Height / 8 ;   				// calcul du nombre de page necessaire
    		if ( (Height % 8) > 0) Nbe_of_page_Char++;				// rajoute 1 si il reste des pixels
    		uint8_t Nbe_of_page_Offset = (Height+Offset_Y) / 8 ;	// calcul du nombre de page necessaire avec l'offset
    		if ((Height+Offset_Y) % 8 > 0 ) Nbe_of_page_Offset++;	// rajoute 1 si il reste des pixels
     
    		if (Nbe_of_page_Offset > Nbe_of_page_Char)Retenue = 1;	// j'indique que j'ai augmenter pour modifier le dernier calcul
     
    		uint32_t Size_Buffer = Nbe_of_page_Offset*Width;		// Je calcul la taille du buffer
    		uint8_t  Buffer[Size_Buffer];
     
    		//----- Premier ligne
    		for(uint8_t i=0; i<Width; i++)
    			Buffer[i] = ((Font[Start_Char+i])<<Offset_Y) & 0x00FF;
     
    		//----- Au milieu
    		for(uint8_t i=Width; i<(Size_Buffer-Width); i++)
    		{
    			temporaire = Font[Start_Char+i] << 8;
    			temporaire +=  Font[Start_Char+(i-Width)];
    			temporaire = temporaire << Offset_Y;
    			temporaire = temporaire >> 8;
    			temporaire = temporaire & 0x00FF;
    			Buffer[i] = temporaire;
    		}
    		//----- Derniere ligne
    		for(uint8_t i=(Size_Buffer-Width); i<Size_Buffer; i++)
    		{
    			if (Retenue == 1)temporaire = Font[Start_Char+i-Width] << Offset_Y;
    			if (Retenue == 0)temporaire = Font[Start_Char+i]<< 8;
    			if (Retenue == 0)temporaire = temporaire + Font[Start_Char+i-Width];
    			if (Retenue == 0)temporaire = temporaire << Offset_Y;
    			temporaire = temporaire >> 8 ;
    			temporaire = temporaire & 0x00FF;
    			Buffer[i] = temporaire;
    		}
     
    		//---- transfert du buffer dans la RAM
    		for (uint8_t page = 0; page < Nbe_of_page_Offset; page++)
    		{
    			st7567_write_cmd(ST7567_SET_COLL+((x+Offset_X)%16));
    			st7567_write_cmd(ST7567_SET_COLH+((x+Offset_X)/16));
    			st7567_write_cmd(ST7567_SET_PAGE_START+Start_page+page);
     
    			for(int i=0; i<Width; i++)
    			{
    				st7567_write_data(Buffer[i+(Width*page)]);
    			}
    		}
     
    		Offset_X += (Width+SPACE_BETWEEN_CHAR);  // Je décale le demarage de deux pixels
    		*str++ ;				// Je pense à la lettre suivante
    	}
    }
    La complexité de cette fonction est qu'elle permet d'écrire n'importe ou dans l'écran ( en X et en Y) et pas forcement en début d'une page comme le font la plupart.

    PS : Merci à Guesset d'avoir prit du temps pour moi !

    RE-PS : au cas ou un expert stm32 passe par la , j'ai un avertissement à la compilation sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      st7567_Write_Text(20, 7,"Abcde 123",microsoftSansSerif_10pt, INFO_microsoftSansSerif_10pt);
    Avertissement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    passing argument 5 of 'st7567_Write_Text' from incompatible pointer type [-Wincompatible-pointer-types]
    Je ne comprends pas pourquoi

    @+

  6. #6
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 477
    Points : 4 676
    Points
    4 676
    Par défaut
    Bonjour dje8269,
    Citation Envoyé par dje8269 Voir le message
    ...Avertissement : passing argument 5 of 'st7567_Write_Text' from incompatible pointer type [-Wincompatible-pointer-types].
    Je ne comprends pas pourquoi...
    Il y a un changement de type sauvage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       extern uint8_t microsoftSansSerif_18pt[];
       extern uint32_t INFO_microsoftSansSerif_18pt[][3];   // équivalent à un pointeur sur entier non signé
       ...
       void st7567_Write_Text(uint8_t x, uint8_t y, char* str, uint8_t* Font, int* Info)  // Info est un pointeur sur entier signé
       ...
    Le compilateur n'aime pas le passage de uint32 * à int * soit d'un pointeur (tableau) sur entier non signé de 32 bits à un un pointeur sur entier signé heureusement aussi de 32 bits.

    Remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       ...
       void st7567_Write_Text(uint8_t x, uint8_t y, char* str, uint8_t* Font, uint32_t * Info)  // OK Info est aussi un pointeur sur entier non signé
       ...
    Salut

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Merci Guesset pources réponses claires.

    Il me reste un seul avertissement dans mon code, alors je tente ma chance.

    ../Core/Src/st7567_driver.c:162:10: warning: value computed is not used [-Wunused-value]


    A la dernière ligne de la fonction : *str++ ;


    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
    void st7567_Write_Text(uint8_t x, uint8_t y, char* str, uint8_t* Font, uint32_t* Info)
    {
     
    	uint32_t Width = 0;
    	uint32_t Height = 0;
    	uint8_t caract = 0;
    	uint8_t Retenue = 0;
    	uint16_t temporaire = 0;
    	uint32_t Start_Char=0;				// Indique l'adresse de depart du caractère dans le tableau
    	uint8_t Start_page = 0 ;			// indique la page de départ
    	uint8_t Offset_Y =0 ;				// calcul l'offset par rapport à la page de départ
    	uint8_t Offset_X = 0;				// Créer le décalage entre chaque caractère
     
    	while ( *str )  // j'écris tant que le byte n'est pas null
    	{
    		caract = *str - 32;					// La place du caractere dans le tableau
    		Width = *(Info + (caract*3));		// Largeur du caractere dans le tableau
    		Height = *(Info + (caract*3)+1);	// hautreur du caractere dans le tableau
    		Start_Char = *(Info + (caract*3)+2);	// l'endroti ou commence le caractere dans le tableau
     
    		Start_page = y / 8 ;			// indique la page de départ
    		Offset_Y = y % 8 ;				// calcul l'offset par rapport à la page de départ
     
     
    		//---- Ici je doit detecter si avec l'offset je dois rajouter ou non une page
    		uint8_t Nbe_of_page_Char = Height / 8 ;   				// calcul du nombre de page necessaire
    		if ( (Height % 8) > 0) Nbe_of_page_Char++;				// rajoute 1 si il reste des pixels
    		uint8_t Nbe_of_page_Offset = (Height+Offset_Y) / 8 ;	// calcul du nombre de page necessaire avec l'offset
    		if ((Height+Offset_Y) % 8 > 0 ) Nbe_of_page_Offset++;	// rajoute 1 si il reste des pixels
     
    		if (Nbe_of_page_Offset > Nbe_of_page_Char)Retenue = 1;	// j'indique que j'ai augmenter pour modifier le dernier calcul
     
    		uint32_t Size_Buffer = Nbe_of_page_Offset*Width;		// Je calcul la taille du buffer
    		uint8_t  Buffer[Size_Buffer];
     
    		//----- Premier ligne
    		for(uint8_t i=0; i<Width; i++)
    			Buffer[i] = ((Font[Start_Char+i])<<Offset_Y) & 0x00FF;
    		//----- Au milieu
    		for(uint8_t i=Width; i<(Size_Buffer-Width); i++)
    		{
    			temporaire = Font[Start_Char+i] << 8;
    			temporaire +=  Font[Start_Char+(i-Width)];
    			temporaire = temporaire << Offset_Y;
    			temporaire = temporaire >> 8;
    			temporaire = temporaire & 0x00FF;
    			Buffer[i] = temporaire;
    		}
    		//----- Derniere ligne
    		for(uint8_t i=(Size_Buffer-Width); i<Size_Buffer; i++)
    		{
    			if (Retenue == 1)temporaire = Font[Start_Char+i-Width] << Offset_Y;
    			if (Retenue == 0)temporaire = Font[Start_Char+i]<< 8;
    			if (Retenue == 0)temporaire = temporaire + Font[Start_Char+i-Width];
    			if (Retenue == 0)temporaire = temporaire << Offset_Y;
    			temporaire = temporaire >> 8 ;
    			temporaire = temporaire & 0x00FF;
    			Buffer[i] = temporaire;
    		}
     
    		//---- transfert du buffer dans la RAM
    		for (uint8_t page = 0; page < Nbe_of_page_Offset; page++)
    		{
    			st7567_write_cmd(ST7567_SET_COLL+((x+Offset_X)%16));
    			st7567_write_cmd(ST7567_SET_COLH+((x+Offset_X)/16));
    			st7567_write_cmd(ST7567_SET_PAGE_START+Start_page+page);
     
    			for(int i=0; i<Width; i++)
    			{
    				st7567_write_data(Buffer[i+(Width*page)]);
    			}
    		}
     
    		Offset_X += (Width+SPACE_BETWEEN_CHAR);  // Je décale le demarage de deux pixels
    		*str++ ;				// Je pense à la lettre suivante
    	}
    }

    Je ne comprends pas la non plus . Peut etre que str est un pointeur est pointeur donc non considérer comme variable ?

  8. #8
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 676
    Points : 1 710
    Points
    1 710
    Par défaut
    Hello,

    Ligne 75, pour passer au caractère suivant, c'est str++, pas *str++. Le compilateur t'informe que la valeur de *str n'est pas utilisée à cet endroit-là.

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Super merci edgarjacobs !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/07/2020, 12h30
  2. Récupérer les infos d'une colonne de type DataSet
    Par Zugg dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/02/2006, 15h46
  3. [MySQL] Chercher des info dans une DB, et les afficher en lien
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/10/2005, 20h29
  4. copier les infos d'une fenêtre dos vers le bloc notes
    Par beegees dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 16/08/2005, 14h06
  5. Ne prendre que les infos avant une certaine date??
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/07/2003, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo