La raison est à la fois simple et subtile: Les fonctions C ne peuvent pas être déclarées pour retourner des tableaux.
Lorsque vous retournez un pointeur, comme ceci:
char *foo(void)
{
char x[] = "hello";
return x;
}
Le return x;
est pas fait retourner x
. Il renvoie un pointeur vers le premier élément de x
- c'est exactement la même chose que dire:
return &x[0];
Il devrait être plus clair pourquoi ce n'est pas correct - il est exactement ce analogue à:
int *foo(void)
{
int x = 100;
return &x;
}
il est cependant possible de revenir structures des fonctions - afin que vous puissiez retourner un tableau aussi longtemps qu'il enveloppé dans un struct
. Ce qui suit est tout à fait OK:
struct xyzzy {
char x[10];
};
struct xyzzy foo(void)
{
struct xyzzy x = { "hello" };
return x;
}
1. Ceci est une conséquence d'une règle de cas particulier pour les types de tableau.Dans une expression, si un tableau ne fait pas l'objet des opérateurs unaires &
ou sizeof
, il évalue un pointeur vers son premier élément. Essayer de cerner un tableau en C, c'est un peu comme essayer d'attraper le brouillard dans vos mains - il disparaît simplement, remplacé par un pointeur.
Vous devriez montrer le cas d'utilisation que vous avez en tête --- je peux deviner, mais c'est une conjecture, et la réponse détaillée dépend de ce que vous voulez faire ... – dmckee
Voici un bon exemple sur la façon de faire choses différentes avec des chaînes et des pointeurs dans C https://stackoverflow.com/a/46344713/5842403 – Joniale