Ajouter un commentaire

fredericmazue

Quote:
testchar.c(12): Warning! W304: Return type 'int' assumed for function 'main'

Oui, celui là, c'est parce que le programme est mal formé, tout simplement. On devrait avoir

int main(void) {/* etc */}

Il faut un code de retour de main. Ce code de retour est utilisé par le système d'exploitation. La valeur 0 indiquant un succès.
main() c'était légal dans le C de l'âge de pierre, mais ça ne l'est plus en C89 ou C99. Apparement les compilateurs le tolèrent et émettent un avertissement.

Quote:
testchar.c(31): Warning! W107: Missing return value for function 'main'

Celui là est lié au précédent. Puisque main doit retourner une valeur, il faut définir cette valeur. par exemple:

return 0;

à la fin du programme. En C++, s'il n'y a aucune autre instruction return dans le main, le return 0; est implicite et on a pas besoin de le mettre, et le compilateur n'émet pas d'avertissement. Je ne sais pas ce qu'il en est de cette finesse en C. J'ai tendance à oublier le standard C faute de le pratiquer :oops: Apparement le return 0; n'est pas implicite. De toutes façons, C ou C++, je n'aime pas l'implicite. Je mets toujours explicitement une instruction return à la sortie du main, et il faut le faire à mon humble avis. Question de clarté du code.

Quote:
Maintenant si vous avez le temps dites moi pour quoi 14 et pas 15 caracteres

Très simple. En C une chaîne de caractères se termine par un octet nul. Si on saisi comme nom la chaine "A", soit une simple lettre, le tableau client.nom, pour reprendre l'exemple, va contenir les valeurs 65 et 0. Le 65 c'est pour le A et le 0 pour la fin de chaîne.
Donc si on entre un nom de 15 caractères, automatiquement il y aura un zéro en 16 eme position, c'est à dire au delà du tableau. On a donc un débordement.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 U   U  FFFF   CCC   CCC  FFFF 
U U F C C F
U U FFF C C FFF
U U F C C F
UUU F CCC CCC F