Reconvertir un pointeur en tableau en C

J’ai une fonction *getText() où le résultat final est un tableau que je dois renvoyer de la fonction. Autant que je sache, ce n’est pas possible directement, alors j’ai créé un pointeur comme suit:

 char *ptr = &plainText[0]; return ptr; 

Je suis encore assez nouveau en C et je ne suis pas tout à fait à l’aise avec les pointeurs. J’ai donc créé un peu de code pour reconvertir le pointeur en tableau dans la fonction pour laquelle j’ai besoin:

 int i; char plainText[256]; for (i=0; *(getText()+i) == '\0'; i++){ plainText[i] = *(getText()+i); } 

L’idée ici est que la boucle for parcourt la chaîne sur laquelle pointe le pointeur jusqu’à ce qu’elle trouve la fin ( '\0' ) et pour chaque caractère, ajoute la chaîne.

Cependant, bien que le programme soit compilé dans gcc sans erreur de compilation, il abandonne sans erreur d’exécution lorsqu’il parvient à ce segment de code.

Quelqu’un pourrait-il me donner des conseils pour que cela fonctionne?

James

Si vous y réfléchissez bien, vous verrez que “convertir un pointeur en tableau” n’a aucun sens .

Un tableau est un bloc de mémoire contigu auquel vous avez atsortingbué un nom .

Un pointeur est une adresse mémoire.

Vous ne pouvez pas convertir un pointeur en tableau. Comment changer soudainement une adresse en bloc de mémoire? Au lieu de cela, vous devrez créer un nouveau bloc et copier ce que vous voulez.

À condition, bien sûr, que la pointee originale existe en premier lieu. Dans votre cas, il semble que ce soit un tableau local, ce qui signifie qu’il est détruit lorsque vous essayez de copier ses données dans un autre tableau.

Peut-être que vous vouliez dire *(getText()+i) != '\0' , sinon votre condition de boucle sera toujours terminée immédiatement

Ceci est incroyable. Ne faites rien de ce que vous faites, prenez du recul, respirez à fond …

Les fonctions C devant renvoyer un tableau le font généralement en prenant simplement un pointeur et une taille maximale comme arguments et en écrivant dans cet espace. Voir strncat par exemple.

Toute cette copie doit être un drapeau rouge que quelque chose ne va pas. 🙂

Lire un bon livre de programmation en C. Vous apprendrez que les tableaux sont très souvent (mais pas toujours ) considérés comme des pointeurs .

Vous ne voulez probablement pas appeler getText() à chaque itération, mettez-le donc dans une variable.

Votre test doit être ” différent du caractère nul “.

Comstackr avec tous les avertissements activés et pour le débogage. Avec gcc sous Linux, cela signifie que gcc -Wall -g . Apprenez à utiliser un débogueur comme gdb sous Linux.

Un pointeur sur un tableau est identique à un pointeur sur le premier élément d’un tableau. C’est juste une valeur d’adresse.

Alors

char ch [10];

ch est identique à & ch [0]

Maintenant, vous n’avez plus besoin de cela pour copier une chaîne terminée par un zéro. Il suffit d’utiliser strcpy ()