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.

3voto

hrnt Points 5835

Le type de retour de votre fonction est un caractère unique ( char ). Vous devez renvoyer un pointeur sur le premier élément du tableau de caractères. Si vous ne pouvez pas utiliser de pointeurs, vous êtes foutu :(

3voto

ChainLooper Points 1

Vous pouvez créer le tableau dans l'appelant, qui est la fonction principale, et passer le tableau à l'appelé, qui est votre fonction myFunction() . Ainsi myFunction peut remplir la chaîne de caractères dans le tableau. Cependant, vous devez déclarer myFunction() comme

char* myFunction(char * buf, int buf_len){
  strncpy(buf, "my string", buf_len);
  return buf;
}

Et en main , myFunction doit être appelé de cette manière :

char array[51];
memset(array, 0, 51); /* All bytes are set to '\0' */
printf("%s", myFunction(array, 50)); /* The buf_len argument  is 50, not 51. This is to make sure the string in buf is always null-terminated (array[50] is always '\0') */

Toutefois, un pointeur est toujours utilisé.

2voto

Sebastiaan Megens Points 2705

Ou que dire de celle-ci :

void print_month(int month)
{
    switch (month)
    {
        case 0:
            printf("January");
            break;
        case 1:
            printf("february");
            break;
        ...etc...
    }
}

Et appelez-le avec le mois que vous calculez ailleurs.

1voto

Nick Bedford Points 3009

A char n'est qu'un caractère d'un octet. Il ne peut pas stocker la chaîne de caractères et n'est pas non plus un pointeur (que vous ne pouvez apparemment pas avoir). Par conséquent, vous ne pouvez pas résoudre votre problème sans utiliser des pointeurs (qui char[] est un sucre syntaxique).

1voto

Sebastiaan Megens Points 2705

Si vous ne pouvez vraiment pas utiliser de pointeurs, faites quelque chose comme ceci :

char get_string_char(int index)
{
    static char array[] = "my string";
    return array[index];
}

int main()
{
    for (int i = 0; i < 9; ++i)
        printf("%c", get_string_char(i));
    printf("\n");
    return 0;
}

Le chiffre magique 9 est horrible, et ce n'est pas un exemple de bonne programmation. Mais vous avez compris. Notez que les pointeurs et les tableaux sont la même chose (en quelque sorte), donc c'est un peu de la triche.

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