Renvoie char / ssortingng à partir d’une fonction

Je suis assez nouveau pour coder en C et je suis actuellement en train de créer une fonction qui retourne une chaîne de caractères / tableau de caractères et l’assignation à une variable.

Jusqu’à présent, ive observé que le retour d’un caractère * est la solution la plus courante. Alors j’ai essayé:

char* createStr() { char char1= 'm'; char char2= 'y'; char str[3]; str[0] = char1; str[1] = char2; str[2] = '\0'; char* cp = str; return cp; } 

Ma question est la suivante: comment utiliser ce caractère char* renvoyé et affecter le tableau de caractères sur lequel il pointe, à une variable char []?

J’ai essayé (tout a conduit à des erreurs de noyade):

  1. char* charP = createStr();
  2. char myStr[3] = &createStr();
  3. char* charP = *createStr();

Notez que vous n’allouez pas la variable de manière dynamic, ce qui signifie que les données dans str , dans votre fonction, seront perdues à la fin de la fonction.

Tu aurais dû:

 char * createStr() { char char1= 'm'; char char2= 'y'; char *str = (char *) malloc(sizeof(char) * 3); str[0] = char1; str[1] = char2; str[2] = '\0'; return str; } 

Ensuite, lorsque vous appelez la fonction, le type de la variable qui recevra les données doit correspondre à celui de la fonction return. Donc, vous devriez avoir:

 char *returned_str = createStr(); 

Si vous voulez retourner un caractère char* d’une fonction, assurez-vous de le malloc() . Les tableaux de caractères initialisés en stack n’ont aucun sens à retourner, car y accéder après le retour de cette fonction est un comportement indéfini.

changez le en

 char* createStr() { char char1= 'm'; char char2= 'y'; char *str = malloc(3 * sizeof(char)); if(str == NULL) return NULL; str[0] = char1; str[1] = char2; str[2] = '\0'; return str; } 
 char* charP = createStr(); 

Serait correct si votre fonction était correcte. Malheureusement, vous retournez un pointeur sur une variable locale dans la fonction, ce qui signifie qu’il s’agit d’un pointeur sur des données non définies dès le retour de la fonction. Vous devez utiliser l’allocation de tas, comme malloc, pour la chaîne dans votre fonction, afin que le pointeur que vous renvoyez ait une signification. Ensuite, vous devez vous rappeler de le libérer plus tard.

Inclure “ssortingng.h” facilite les choses. Un moyen plus simple de résoudre votre problème est le suivant:

 #include  char* createStr(){ static char str[20] = "my"; return str; } int main(){ char a[20]; strcpy(a,createStr()); //this will copy the returned value of createStr() into a[] printf("%s",a); return 0; } 

vous pouvez utiliser un tableau statique dans votre méthode pour éviter de perdre votre tableau à la fin de votre fonction:

 char * createStr() { char char1= 'm'; char char2= 'y'; static char str[3]; str[0] = char1; str[1] = char2; str[2] = '\0'; return str; 

}