Décidemment j'ai toujours le meme problème qui revient. Lorsque j'essaye d'écrire quelque chose dans une variable de type char * , j'ai un message d'erreur, on le faisant dans une variable de type char variable[128] ca marche, mais je ne sais pas comment retourner ce type de variable dans une fonction !!
Quelqu'un peut-il m'expliquer quelles sont les conditions pour utiliser char * ? et la differance avec l'utilisation d'un tableau ?
# C élémentaire
Posté par Mike_M . Évalué à 3.
Pour ce faire tu peux par exemple utiliser malloc (voir man malloc) de la manière suivante: char * text = (char *) malloc(128); (sauf erreur de ma part, ce qui serait embêtant :p... j'me prends pas le temps de tester).
Enfin bon, à la fin de ton processus tu libères la mémoire avec free (voir man 3 free) free(text);
Enfin, l'adresse d'un tableau est toujours le nom de la variable tout seul ou en utilisant l'opérateur d'adressage sur la première cellule de ton tableau (eg. (en allemand) ou aka. (en anglais) &text[0])
zog zog.
[^] # Re: C élémentaire
Posté par durandal . Évalué à 2.
char * text = malloc (128);
(Et eg. c'est du latin : exempli gratia ;).
[^] # Re: C élémentaire
Posté par cho7 (site web personnel) . Évalué à 2.
aka ca signifie "as known as", littéralement, "aussi connu comme", donc je vois pas ce qu'il vient faire là.
Autrement comme le dit le monsieur au dessus eg c'est pas de l'allemand, et t'aurais pu remplacer tous tes "voir" par des cf (confer en latin)
Voilà pour la pause culturelle
[^] # Re: C élémentaire
Posté par Mike_M . Évalué à 0.
eg aka cf .. mmh .. mon vocabulaire s'agrandit
[^] # Re: C élémentaire
Posté par liberforce (site web personnel) . Évalué à 2.
http://www.acronymfinder.com/af-query.asp?Acronym=aka&String=ex(...)
[^] # Re: C élémentaire
Posté par cho7 (site web personnel) . Évalué à 2.
# malloc
Posté par dinomasque . Évalué à 2.
Avec char * variable, tu obtiens juste un pointeur non initialisé (donc qui ne pointe vers rien de particulier). Il faut explicitement allouer un espace mémoire pour ce pointeur et lui dire de pointer dessus :
variable = malloc (128)
L'avantage du char * est qu'on n'est pas obligé de connaitre la taille de l'espace mémoire à allouer au moment de la compilation ( on peut utiliser une variable) au contraire du tableau statique.
Bons débuts en C !
BeOS le faisait il y a 20 ans !
# Tentative d'explication
Posté par elb . Évalué à 3.
char *variable déclare un pointeur, c'est-à dire une variable qui est destinée à contenir une adresse mémoire. Pour l'instant cette variable n'est pas initialisée, par conséquent elle pointe vers une adresse complètement indéterminée. Si tu essais d'écrire quelquechose à l'adresse pointée par cette variable, tu vas quasi obligatoirement violer la protection mémoire et provoquer une Segmentation fault.
Ces deux déclarations sont donc bien différentes. Là où il peut y avoir confusion, c'est dans l'usage qu'on peut faire d'un tableau. Je m'explique : dans le premier cas, lorsque tu fait référence à ton tableau par son seul nom variable, tu fait référence à un pointeur, comme dans le second cas, à la différence près que cette fois-ci ton pointeur est initialisé et pointe vers la zone mémoire qui a été réservée au moment de la déclaration.
Précision : une fonction ne peut pas retourner un tableau. Elle peut par contre retourner un pointeur qui pourrait être l'adresse de ton tableau par exemple.
[^] # Re: Tentative d'explication
Posté par Jllc . Évalué à 2.
A condition de savoir ce que l'on fait, on peut mélanger les notions de pointeur (char *) et tableau (char[]), puisque au niveau processeur, ceux sont des adresses mémoires vers les données.
J'ai d'ailleurs fait ça pas plus tard qu'hier, pour pouvoir réallouer dynamiquement de la mémoire à un tableau, en le gérant comme un pointeur. Car avec la syntaxe char[128], la chaine de caractères ne pourra jamais être augmentée.
Au contraire, sur un pointeur, on peut faire un realloc (voir man realloc) pour ajouter de la mémoire, tout en continuant à faire par exemple des boucles avec la notation char[i] pour parcourir le tableau. Ou faire char *++ sur un tableau.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.