warning 2066 avec MCC18

Bonsoir à tous,

En utilisant MCC18, avec les extraits de code suivant:

rom char* text="essai"; ram char var[40];

strncpypgm2ram(var,text,5);

j'obtiens le warning suivant

D:\DvptPic\px01\px01.c:396:Warning [2066] type qualifier mismatch in assignment

bien que le programme fonctionne, ce n'est qu'un warning, j'aimerai bien trouver la syntaxe correct pour éviter ce warning. Si vous avez une idée ...

Bonne année à tous. A+

Reply to
Bruno
Loading thread data ...

Bruno a écrit :

les parametres de la fonction sont bien (destination,source,nbre)?

Reply to
markus

markus a tapoté du bout de ses petites papattes :

var ne serait-il pas un mot clé du compilo ?

--
LeLapin
Reply to
LeLapin

On Jan 3, 12:01 am, Bruno

A laquelle de ces trois lignes correspond le warning ?

Et quel est le prototype de la fonction strncpypgm2ram() ? Peut-etre faut-il explicitement caster un des parametres ?

Reply to
Jean-Christophe

"Bruno" a écrit dans le message de news:

4b3fd066$0$24610$ snipped-for-privacy@news.free.fr...

essaie avec des unsigned char pour voir

par contre, si tu veux recuperer une chaine, la taille est de 6, pas 5, car il ne faut pas oublier le 0 de fin de chaine

Reply to
jlp

Bruno a écrit :

Bonjour et merci pour vos réponses.

La ligne qu déclenche le warning est celle de l'instruction strncpypgm2ram.

Le prototype de cette fonction est décrite dans le fichier c:\mcc18\h\string.h, c'est à dire:

char *strncpypgm2ram (auto char *s1, auto const MEM_MODEL rom char *s2, auto sizeram_t n);

/** @name strncpyram2pgm * The {\bf strncpyram2pgm} function performs a {\bf strncpy} where {\bf s1} * points to program memory and {\bf s2} point to data memory. * @param s1 pointer to destination in program memory * @param s2 pointer to source in data memory * @param n maximum number of characters to copy */

Le code exact qui génere le warning est, (je n'utilise pas de variable var).

void initEcran(void) { int i; for(i=0;i

Reply to
Bruno

Bruno a écrit :

??

-> @param s2 pointer to source in data memory me parait contradictoire avec:

-> auto const MEM_MODEL rom char *s2, sinon, la data memory serait en rom?

Reply to
markus

Bonjour,

As-tu essay=E9 de remplacer : rom char* text=3D"essai"; par const rom char* text=3D"essai";

?

J'ignore comment MicroChip a impl=E9ment=E9 son compilateur C, mais en C ANSI, il est pr=E9f=E9rable de typer un pointeur sur une litt=E9rale par un "const" ( qui le sera de toute fa=E7on).

--

-Stan

--

-Stan

Reply to
Stan

oui, j'ai aussi essayé cela, merci pour vos réponses et pour l'attention que vous avez bien voulu porter à ce problème, comme le warning n'empêche pas le programme de tourner, je vais continuer sans, lorsque je serai assez avancé, pour ceux qui le veule, je vous enverrai le source complet ...

Merci encore et bonne soirée à tous.

Reply to
Bruno

en

ion

Teste cela : const far rom char* text=3D"essai"; car dans le prototype de la fonction, il y a le MEM_MODEL, et c'est probablement lui qui pose pb. Ton compilo doit, par d=E9faut g=E9n=E9rer un "const near rom char *".

Essaye et tiens nous au courant...

--

-Stan

Reply to
Stan

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.