salut !
c'est possible de créer une variable de type FILE* un peu comme le stdin ?
c'est à dire pas sur le disque dur mais directement dans la memoire !
...j'espere ne pas avoir dis une grosse c...
salut !
c'est possible de créer une variable de type FILE* un peu comme le stdin ?
c'est à dire pas sur le disque dur mais directement dans la memoire !
...j'espere ne pas avoir dis une grosse c...
Ce n'est pas une connerie, et hélas, non.
Il n'existe aucun écquivalent en C standard aux MemoryStream offerts par certains langages.
Par contre, il me semble que tu peux, en C standard, créer un fichier temporaire qui sera supprimé quand tu le fermeras, et sera si possible gardé en RAM.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
dommage...![]()
merci pour ta reponse !
ps: j'imagine que c'est pas avec fopen qu'on peut faire ca...
fopen agit uniquemeht sur les fichiers sur disque. Je pense qu'il serait assez intéressant de créer ses propres routines pour simuler par exemple un fichier mais virtuel (en ram au lieu du disque dur) ... enfin jusque dans la mesure du possibleEnvoyé par kamouminator
![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Je crois bien que la fonction appropriée s'appelle tmpfile() ou un truc du genre...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Absolument pas. Si un volume virtuel a été créé (on sais le faire en DOS avec device=vdisk ... ou un truc comme ça, c'est vieux, pourquoi pas en Windows), il a une lettre et devient accessible à fopen() comme n'importe quelle unité.Envoyé par Franck.H
C'est ca mais je tiens à souligner que l'ouverture du fichier créé se fait en "wb+" autrement dit en mode binaire !Envoyé par Médinoc
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Avant de chercher une solution, il faut exposer le problème.Envoyé par kamouminator
Je rappelle le processus, visiblement, ça a du mal à rentrer.
1 - définir (quoi ?)
2 - concevoir (comment ?)
3 - réaliser (codage et tests).
Alors que veux-tu faire exactement ?
Ok, merci Emmanuel, j'ai appris quelques chose aujourd'hui car je ne savais pas ca.Envoyé par Emmanuel Delahaye
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
en fait comme je l'ai souvent dis, je suis entrain d'ecrire une sorte de calculette...
et ce que je veux faire la, c'est d'enregistrer chaque ligne tappée dans un tableau(de pointeur) a i= 0 il y aura la premiere ligne....pour pouvoir revenir au calcul precedent facilement en appuiant par ex sur la fleche haut.
j'afficherai bien entendu une copie et non la ligne lue.
ensuite je veux pouvoir modifier a mon aise cette ligne.
comme une ligne sera aussi un tableau, il sera difficile de la modifier.
je me demandais s'il etai pas possible de la mettre dans un FILE* et alors la modifier !
mais j'ai eu la une meilleure idée...mais je ne sais absolument pas si c'est possible:
on peut ecrire sur le stdin ??? ca m'arrangerai beacoup...
Si c'est tableau de pointeur sur des chaines allouées, c'est facile.Envoyé par kamouminator
Allouer un nouveau bloc, copier, modifier, libérer l'ancien bloc, stocker l'adresse du nouveau.
je me demandais s'il etai pas possible de la mettre dans un FILE* et alors la modifier !
mais j'ai eu la une meilleure idée...mais je ne sais absolument pas si c'est possible:
on peut ecrire sur le stdin ??? ca m'arrangerai beacoup...
Une calculatrice, c'est compliqué. Ca mérite une étude sérieuse, pas de la bidouille de coin de table...
mais j'ai etudié la question, j'ai d'ailleur une calculatrice qui marche,
je cherche juste à faire quelques amelioration, bout par bout.
d'abord un historique.
ensuite une partie variables, fonctions, affectations. puis affichage d'une fonction avec la SDL.
et enfin, peut etre, une interface graphique...
presque toutes mes parties sont independantes, donc y'a pas de souci pour ajouter quoique ce soit !
sinon, par rapport à:
je ne cherche pas a remplacer l'ancien bloc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Si c'est tableau de pointeur sur des chaines allouées, c'est facile. Allouer un nouveau bloc, copier, modifier, libérer l'ancien bloc, stocker l'adresse du nouveau.
et je ne comprend pas comment modifier serait facile !
si par ex je veux inserer quelque chose a l'interieure de la ligne copiée...il faudrai decaler tout ce qu'il y a apres...
c'est pour ca que je voulais savoir si ecrire sur le stdin etais possile !...ca l'est ou pas alors ?
parcequ'en plus je n'aurai plus qu'a appeler ma fonction de saisie...et la modification se ferai afec le getchar...
bien sur tout ca n'est qu'hypothetique....
C'est pas bien compliqué.Envoyé par kamouminator
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <stdio.h> #include <string.h> #include <stdlib.h> int main (void) { /* POSIX.1 donc tres portable. Fonction triviale... */ char *s = strdup ("Hello word"); puts (s); /* inserer " wild" */ { char const *ins = " wild "; size_t const len = strlen (ins); char *const new = malloc (strlen (s) + len + 1); /* trouver le point d'inclusion */ char *const p = strchr (s, ' '); *p = 0; strcpy (new, s); strcat (new, ins); strcat (new, p + 1); /* jeter l'ancien bloc */ free (s); /* pointer sur le nouveau */ s = new; } puts (s); free (s), s = NULL; return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5Hello word Hello wild word Press ENTER to continue.
ah oui pas mal !
avec un realloc et sans le strchr ca devrai peut etre le faire...
c'est '\koi' pour retourner d'un caractere en arriere ?
Euh... essaye...Envoyé par kamouminator
c'est '\koi' pour retourner d'un caractere en arriere ?![]()
N'existe pas.
(Si tu penses à BS ou '\b', ça ne fait pas ce que tu crois, quand à ungetc(), euh, faut lire la doc...)
oui voila c'est ca \b,
je ne demande pas ca pour l'ecriture sans une chaine, mais pour l'affichage a l'ecran: quand j'appuie sur fleche gauche ! pour deplacer le curseur !
j'ai essayé avec ungetc(), mais ca marche pas, ca n'affiche q'un seul caractere:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include<stdio.h> int main(void){ char a=0; fflush(stdin); ungetc('s',stdin); ungetc('a',stdin); ungetc('l',stdin); ungetc('u',stdin); ungetc('t',stdin); do { a=getchar(); printf("%c",a); } while(a!='\n'); }
c'est bon, j'ai trouvé !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #include<stdio.h> int main(void){ int i=0; char a=0; char b[]="salut"; fflush(stdin); do { if(i<6)ungetc(b[i],stdin); a=getchar(); printf("%c",a); i++; } while(a!='\n'); }
oh ! j'ai eu peur ! ^^
non mais de toute facon ça marche pas en fait...
je peux ni effacer, ni me deplacer vers un caractere particulier...
je vais faire avec ta methode et puis c'est tout....
Partager