Warning imcomprehensible [gcc] - C - Programmation
Marsh Posté le 21-01-2006 à 15:12:36
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.
Marsh Posté le 21-01-2006 à 15:16:44
malouin35 a écrit : Voilà la fonction : |
Et puis faut pas oublier d'inclure "<strings.h>"...
Marsh Posté le 21-01-2006 à 15:36:16
malouin35 a écrit : Voilà la fonction : |
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.
Marsh Posté le 21-01-2006 à 17:12:43
domos 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.
Marsh Posté le 23-01-2006 à 08:41:41
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à
Marsh Posté le 23-01-2006 à 09:01:22
domos a écrit : Je ne maitrise pas le language C. |
Il ne tient qu'à toi de le maitriser...
Marsh Posté le 24-01-2006 à 17:12:01
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]"...
Marsh Posté le 24-01-2006 à 17:46:17
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 ?
....
Marsh Posté le 24-01-2006 à 17:51:54
bin pour ecrire un programme en C, je vois pas comment trop faire autrement ? oO
Marsh Posté le 24-01-2006 à 18:01:56
Sve@r a écrit : Mais pourquoi donc ?
ou
|
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 *.
Marsh Posté le 25-01-2006 à 13:04:11
ReplyMarsh Posté le 25-01-2006 à 13:12:19
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é.
Marsh Posté le 21-01-2006 à 14:50:56
Bonjour,
Sous Linux avec gcc version 4.0.3, j'ai un warning qui revient souvent du type:
avec ce source:
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