A voir également:
- Allocation de la memoire
- Mémoire vive - Guide
- Test memoire pc - Guide
- Vider memoire iphone - Guide
- Mémoire virtuelle - Guide
- Controleur de mémoire pci ✓ - Forum Matériel & Système
2 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
4 nov. 2006 à 21:55
4 nov. 2006 à 21:55
Ha, c'est le problème avec scanf, tu ne sais pas à l'avance la longueur de la chaîne qu'on va rentrer avec ça.
Vaut mieux utiliser une boucle avec getchar() en limitant le nombre de caractères à saisir. Mettons dix par exemple. Ca donnera:
Si tu veux pouvoir saisir des chaines de longueur variable que pourrait entrer l'utilisateur, il faudra passer par des fonctions comme realloc par exemple....
Vaut mieux utiliser une boucle avec getchar() en limitant le nombre de caractères à saisir. Mettons dix par exemple. Ca donnera:
char *element=malloc(10); int i; for (i=0;i<10;i++){ if( (element[i]=(char)getchar()) == '\n'){ break; } } element[i]='\0'; printf("%s\n",element); return 0;
Si tu veux pouvoir saisir des chaines de longueur variable que pourrait entrer l'utilisateur, il faudra passer par des fonctions comme realloc par exemple....
Bonjour,
Si j'ai bien compris tu souhaites créer un tableau de chaines de caractères qui ont chacune leur longueur propre.
Tu peux allouer à chacune d'elles une taille différente en divisant le travail en deux étapes :
1) tu fixes une limite élevée au nombre de caractères que l'utilisateur peut entrer (par exemple, 1000)
2) tu réserve en mémoire l'espace minimum nécessaire pour stocker la chaîne saisie. il suffit de récupérer la taille de la chaîne (strlen) et de faire une nouvelle allocation mémoire (malloc).
Ce qui donne :
Fab
Si j'ai bien compris tu souhaites créer un tableau de chaines de caractères qui ont chacune leur longueur propre.
Tu peux allouer à chacune d'elles une taille différente en divisant le travail en deux étapes :
1) tu fixes une limite élevée au nombre de caractères que l'utilisateur peut entrer (par exemple, 1000)
2) tu réserve en mémoire l'espace minimum nécessaire pour stocker la chaîne saisie. il suffit de récupérer la taille de la chaîne (strlen) et de faire une nouvelle allocation mémoire (malloc).
Ce qui donne :
#include <stdio.h> #include <stdlib.h> int main() { char **tab; char *chaine1,*chaine2; int i,x,total=0; int taille = 3; tab = (char**) malloc(taille * sizeof(char *)); for(i=0; i<taille; i++) { printf("\nLigne %d = ",i); chaine1 = (char*)malloc(sizeof(char)*1000); gets(chaine1); x = strlen(chaine1); chaine2 = (char*)malloc(sizeof(char)*x); free(chaine1); tab[i] = chaine2; total += x; } for(i=0; i<taille; i++) { printf("%s\n",tab[i]); } printf("La taille du tableau est de %d octets.\n",total*sizeof(char)); for (i=0; i<taille; i++) free(tab[i]); free(tab); return 0; }
Fab