Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1583 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [gcc] Warning imcomprehensible

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[gcc] Warning imcomprehensible

n°1288934
domos
Posté le 21-01-2006 à 14:50:56  profilanswer
 

Bonjour,
 
Sous Linux avec gcc version 4.0.3, j'ai un warning qui revient souvent du type:
 

Code :
  1. warning: pointer targets in passing argument 1 of 'strcpy' differ in signedness


avec ce source:

Code :
  1. unsigned char buff[16] ;
  2. strcpy(buff, "Bonjour\n\r" ) ;


 
Ce message apparait maintenant sytématiquement avec les fonctions strings en autre.
Ce n'est pas bloquant puisque c'est seulement un 'warning', mais j'aimerais bien en connaitre la cause.
 
 
merci pour toute information à ce sujet

mood
Publicité
Posté le 21-01-2006 à 14:50:56  profilanswer
 

n°1288940
malouin35
Posté le 21-01-2006 à 15:12:36  profilanswer
 

Voilà la fonction :
 
Library:   string.h
 
Prototype: char strcpy(char *s1, const char *s2);
 
Syntax:    
    char string2[20]="red dwarf";
    char string1[20]="";
           strcpy(string1, string2);
 
Donc dans ton exemple tu peut pas copier un char dans un unsigned char.

n°1288943
Sve@r
Posté le 21-01-2006 à 15:16:44  profilanswer
 

malouin35 a écrit :

Voilà la fonction :
 
Library:   string.h
 
Prototype: char strcpy(char *s1, const char *s2);
 
Syntax:    
    char string2[20]="red dwarf";
    char string1[20]="";
           strcpy(string1, string2);
 
Donc dans ton exemple tu peut pas copier un char dans un unsigned char.


Et puis faut pas oublier d'inclure "<strings.h>"...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1288956
domos
Posté le 21-01-2006 à 15:36:16  profilanswer
 

malouin35 a écrit :

Voilà la fonction :
 
Library:   string.h
 
Prototype: char strcpy(char *s1, const char *s2);
 
Syntax:    
    char string2[20]="red dwarf";
    char string1[20]="";
           strcpy(string1, string2);
 
Donc dans ton exemple tu peut pas copier un char dans un unsigned char.


 
Effectivement, il ne veux pas des "unsigned char", même en copiant un unsigned char dans un autre unsigned char.
C'est bizarre, avec une  version plus ancienne de gcc, je n'avais pas ce warning.
 
Merci pour cette précision.

n°1288958
++fab
victime du syndrome IH
Posté le 21-01-2006 à 15:45:03  profilanswer
 

gcc-4.0.3 ?  

n°1289007
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-01-2006 à 17:12:43  profilanswer
 

domos a écrit :

warning: pointer targets in passing argument 1 of 'strcpy' differ in signedness


avec ce source:

unsigned char buff[16] ;
strcpy(buff, "Bonjour\n\r" ) ;




Pourquoi unsigned ? Le bon type pour les chaines de caractères, c'est char. Point. strcpy() attend l'adresse d'un char, pas d'un unsigned char.

Message cité 2 fois
Message édité par Emmanuel Delahaye le 21-01-2006 à 17:13:54

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1289837
domos
Posté le 23-01-2006 à 08:41:41  profilanswer
 

Emmanuel Delahaye a écrit :

Pourquoi unsigned ? Le bon type pour les chaines de caractères, c'est char. Point. strcpy() attend l'adresse d'un char, pas d'un unsigned char.


 
Désolé de froisser les puristes.
Je ne maitrise pas le language C.
 
J'ai repris une partie de code dans un ex. et la compilation passait sans warning avec un version gcc + ancienne.
Je ne comprenais pas le message mais on me l'a aimablement expliqué plut haut.
 
Maintenant, c'est plus clair.
 
voilà

n°1289843
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-01-2006 à 09:01:22  profilanswer
 

domos a écrit :

Je ne maitrise pas le language C.


Il ne tient qu'à toi de le maitriser...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1291181
Sve@r
Posté le 24-01-2006 à 17:12:01  profilanswer
 

Emmanuel Delahaye a écrit :

Pourquoi unsigned ? Le bon type pour les chaines de caractères, c'est char. Point.


Mais pourquoi donc ?
Une chaîne de caractères est une suite de codes ascii. La table des codes ascii allant de 0 à 127 (voire de 0 à 255), il serait logique de la déclarer comme une suite de valeurs non signées non ???
En plus, que je déclare

char tab[]="A"

ou

unsigned char tab[]="A"


J'aurai toujours la même valeur binaire "0100 0001" dans "tab[0]"...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1291211
Kyle_Katar​n
Posté le 24-01-2006 à 17:46:17  profilanswer
 

Emmanuel Delahaye a écrit :

Il ne tient qu'à toi de le maitriser...


 
en même temps a-t-on en général vraiment BESOIN de maitriser le C ?
 
....

mood
Publicité
Posté le 24-01-2006 à 17:46:17  profilanswer
 

n°1291217
blackgodde​ss
vive le troll !
Posté le 24-01-2006 à 17:51:54  profilanswer
 

bin pour ecrire un programme en C, je vois pas comment trop faire autrement ? oO


---------------
-( BlackGoddess )-
n°1291226
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-01-2006 à 18:01:56  profilanswer
 

Sve@r a écrit :

Mais pourquoi donc ?
Une chaîne de caractères est une suite de codes ascii. La table des codes ascii allant de 0 à 127 (voire de 0 à 255), il serait logique de la déclarer comme une suite de valeurs non signées non ???
En plus, que je déclare

char tab[]="A"

ou

unsigned char tab[]="A"


J'aurai toujours la même valeur binaire "0100 0001" dans "tab[0]"...


Parce que c'est écrit dans la définition du langage C et pour des raisons probablement historiques qui me dépassent (demande sur news:comp.lang.c). D'ailleurs, toutes les fonctions standards manipulant des chaines ont des paramètres de type char * et non unsigned char *.


Message édité par Emmanuel Delahaye le 24-01-2006 à 18:02:39

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1291873
Tarabiscot​e
Posté le 25-01-2006 à 13:04:11  profilanswer
 

ni signed char * d'ailleurs. Mais char peut être égal à l'un des deux.

n°1291878
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-01-2006 à 13:12:19  profilanswer
 

Tarabiscote a écrit :

ni signed char * d'ailleurs. Mais char peut être égal à l'un des deux.


Exact, j'ai oublié de préciser que, selon l'implémentation (ou un reglage du compilateur), un char sera en réalité un unsigned char ou un signed char.
 
Le choix du char (aka plain char) est une façon de régler le problème de la portabilité.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [gcc] Warning imcomprehensible

 

Sujets relatifs
[php]warning fopenWarning: ftp_fput() [function.ftp-fput]: Opening data channel for file
warning: implicit declaration of function 'ftruncate'Warning: Trop curieux... [résolu!]
warning gcc [Résolu]Pb de realloc et warning lors de la compilation
warning a l apel de file_get_contentsWarning avec ftp_login
[resolu]Warning qui s'affiche malgré un traitement de l' erreur[PHP] Warning: copy() failed to open stream: Permission denied
Plus de sujets relatifs à : [gcc] Warning imcomprehensible


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR