140 votes

Renvoi d'une chaîne de caractères C à partir d'une fonction

J'essaie de renvoyer une chaîne de caractères C à partir d'une fonction, mais cela ne fonctionne pas. Voici mon code.

char myFunction()
{
    return "My String";
}

En main Je l'appelle ainsi :

int main()
{
  printf("%s", myFunction());
}

J'ai également essayé d'autres méthodes pour myFunction mais ils ne fonctionnent pas. Par exemple :

char myFunction()
{
  char array[] = "my string";
  return array;
}

Note : Je n'ai pas le droit d'utiliser des pointeurs !

Un peu d'histoire sur ce problème :

Il existe une fonction qui permet de savoir quel mois nous sommes. Par exemple, si c'est 1, elle renvoie janvier, etc.

Ainsi, lorsqu'il s'agit d'imprimer, il procède de la manière suivante : printf("Month: %s",calculateMonth(month)); . Le problème est maintenant de savoir comment renvoyer cette chaîne de caractères à partir de la fonction calculateMonth fonction.

1voto

Cheshar Points 23

Dans votre code, vous essayez de renvoyer une valeur de String (en C qui n'est rien d'autre qu'un tableau de caractères à terminaison nulle), mais le type de retour de votre fonction est char qui vous cause tous les ennuis. Au lieu de cela, vous devriez l'écrire de cette manière :

const char* myFunction()
{

    return "My String";

}

Et il est toujours bon de qualifier son type avec const tout en assignant des littéraux en C à des pointeurs, car les littéraux en C ne sont pas modifiables.

1voto

mustafa candan Points 311

Une autre chose à garder à l'esprit est que vous ne pouvez pas renvoyer une chaîne de caractères définie comme une variable locale à partir d'une fonction C, car la variable sera automatiquement détruite (libérée) à la fin de l'exécution de la fonction.

#include <stdio.h>
#include <stdlib.h>

char *myfunc(){
    char *myvar = (char *)malloc(20);
    printf("Plese enter some text \n");
    fgets(myvar, 20, stdin);
    return myvar;
}
int main(){
    printf("You entered: %s", myfunc());
}

0voto

Hayato Points 255

Le prototype de votre fonction indique qu'elle renverra un caractère. Vous ne pouvez donc pas renvoyer une chaîne de caractères dans votre fonction.

0voto

Oleg Karavan Points 1
char* myFunction()
{
    return "My String";
}

En C, les chaînes de caractères littérales sont des tableaux avec la classe de mémoire constante statique, de sorte que le renvoi d'un pointeur sur ce tableau est sans danger. Pour plus de détails, voir la question de Stack Overflow "Durée de vie d'une chaîne de caractères littérale en C

0voto

passionatedevops Points 333

Chaîne de caractères renvoyée par la fonction

#include <stdio.h>

const char* greet() {
  return "Hello";
}

int main(void) {
  printf("%s", greet());
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X