Par exemple, j'ai dans le fichier principal et dans un fichier importé p> Cependant, à la ligne 2 dans la Fichier principal, I Obtenir l'erreur: Qu'est-ce que je suis Je fais mal? Toute suggestions ou conseils seraient appréciés. Je vous remercie d'avance. P> p> "Types incompatibles lors de l'affectation à la touche" Numéro de caractère * ** [(in int)] "de type 'char * **' code> p>
3 Réponses :
Votre type de retour est Autre que vous devriez poster Le code réel que vous avez du problème, le code que vous avez publié ne compile pas et n'a pas beaucoup de sens. p> Pour corriger votre code, la fonction doit être renvoyée OH et renvoyer un pointeur à une variable locale, comme vous le faites dans votre cas, est une recette parfaite pour les accidents et le comportement indéfini. p> Ce que vous vouliez dire probablement était: p> et dans un fichier importé p> Char ** code>, tandis que vous l'attribuez à Char ** [] code>, c'est incompatible. char * ** [Numéro] code>. Remarque En outre, que vous mondez la valeur de retour à char * code> au lieu de char * ** code> que vous avez déclaré (ou char * ** [numéro] code] > que cela devrait être, et en fait - est). p>
Quel devrait être le type de retour pour renvoyer une gamme de chaînes?
Il semble y avoir une certaine confusion quant à ce que la chaîne est en C dans C, une séquence terminée null de Je veux juste appeler la fonction Vous ne pouvez pas retourner un tableau, ni un pointeur à un tableau local. Vous pouvez cependant passer la matrice à Char code> S est considérée comme une chaîne. Il est généralement représenté par char * code>.
build_array () code> et renvoyer la matrice de chaînes p>
blockQuote> build_array code> comme argument, ainsi que sa taille code> et remplir cela à la place. P> void build_array( char* strings[], size_t size )
{
// make sure size >= 2 here, based on your actual logic
strings[0] = "A";
strings[1] = "B";
}
...later called as:...
char *array[NUMBER];
build_array(array, NUMBER);
Merci beaucoup. Il compile toutefois, cependant, lorsque j'essaie d'imprimer le contenu, rien n'imprime ni imprime gibberish. Y a-t-il un problème avec l'attribution de valeurs au tableau?
@LearningpyThon: Nous avons vu si peu de votre code, que je ne saurais pas. Comment numéro code> défini? Comment essayez-vous d'imprimer le contenu?
@LearningpyThon: Eh bien je suis intrigué ... Qu'est-ce que c'était?
Utilisation de int code> pour une taille de matrice? Ah bon? ;)
@Chris Lutz: Si dans C ++, je serais allé avec std ::ze_t code> qui n'est pas signé, est-ce votre point?
@ K-ballo - Taille_t code> est un type en C aussi, c'est le type de valeur renvoyé par taille de code>. ( taille_t code> est déclaré dans stddef.h code> et stdlib.h code>)
Comme Littleadv a souligné, votre code pose plusieurs problèmes:
Mismatch entre retourner un pointeur sur une variable locale p> li>
etc. p> li>
ul> Cet exemple peut aider: P> Char ** code> et Char ** [] CODE> P> LI>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define NUMBER 2
#define MAX_STRING 80
char **
build_array ()
{
int i = 0;
char **array = malloc (sizeof (char *) * NUMBER);
if (!array)
return NULL;
for (i = 0; i < NUMBER; i++) {
array[i] = malloc (MAX_STRING + 1);
if (!array[i]) {
free (array);
return NULL;
}
}
strncpy (array[0], "ABC", MAX_STRING);
strncpy (array[1], "123", MAX_STRING);
return array;
}
int
main (int argc, char *argv[])
{
char **my_array = build_array ();
if (!my_array) {
printf ("ERROR: Unable to allocate my_array!\n");
return 1;
}
else {
printf ("my_array[0]=%s, my_array[1]=%s.\n",
my_array[0], my_array[1]);
}
return 0;
}
Poster le code actuel? Où est
strings code> défini? Pourquoi prenez-vous un pointeur sur une chaîne littérale? Etc...Est
tableau code> supposé êtrecordes code>? Essayez-vous de renvoyer un pointeur sur un objet pile alloué?Je veux juste appeler la fonction Build_Array () et renvoyer la matrice de chaînes (pointeurs sur des tableaux de caractères) à utiliser dans Main.
Les cordes ne sont pas des pointeurs vers des tableaux de caractère, ils ne sont que du pointeur à des caractères.
Droite, mon erreur. Comment ferais-je cela?
Est-ce que je retournerais un pointeur sur un tableau de pointeurs? Comment ferais-je cela?