ne peux pas comprendre comment renvoyer une chaîne de fonction en C

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é.