void add() { char name[50], surname[50], usern[50]; int id, birth, amount; printf("Enter your name, surname and your year of birth:\n"); scanf("%s %s %d", &name, &surname, &birth); printf("Enter your ID, username and your total amount:\n"); scanf("%d %s %d", &id, &usern, &amount); const char *pass1=function(usern); } const char *function (char usern[50]) { char temp; int i=0; int j; j = strlen(usern) - 1; while (i < j) { temp = usern[i]; usern[i] = usern[j]; usern[j] = temp; i++; j--; } return usern; }
J’appelle ‘add’ depuis ‘main’ pour imprimer ces choses, puis j’appelle ‘fonction’ pour me retourner la chaîne usern
mais quelque chose ne va pas.
J’ai l’erreur lors de la compilation:
[Avertissement] l’initialisation crée un pointeur à partir d’un entier sans transtypage -> const char * pass1 = function (usern);
[Erreur] types en conflit pour ‘fonction’ -> fonction const char * (char usern [50])
Les messages d’erreur que vous voyez sont dus au fait que vous n’avez pas déclaré la fonction function
avant de l’ utiliser. Le compilateur déclare donc implicitement un prototype avec int
comme type par défaut pour function
. Mais le type de retour réel de la function
conflit avec le type implicite int
. Donc, vous obtenez ces erreurs.
Notez que cette règle int implicite n’est plus valide car elle a été supprimée depuis C99. C’était le cas dans C89 / C90.
La solution est de fournir un prototype pour cela. Ajoutez ceci en haut de votre fichier source (ou incluez-le dans un fichier d’en-tête si vous en avez un):
const char *function (char *);
La durée de vie pour laquelle le retour de function
est valide est la même que la durée de vie du paramètre usern
qui lui est passé.
En effet, aucune copie en profondeur du tableau de caractères n’est prise.
Si vous tentez de renvoyer pass1
partir de add
et de l’utiliser, le comportement du programme sera indéfini car l’ usern
sera hors de scope.
La chose normale à faire ici en C est de malloc
une nouvelle chaîne, en lui renvoyant un pointeur. N’oubliez pas d’appeler free
à un moment donné.