Probleme de backspace avec fprintf. - C - Programmation
Marsh Posté le 11-11-2004 à 00:38:01
Code :
|
Marsh Posté le 11-11-2004 à 00:43:40
Oui ! Mais si je veux savoir si le perametre donnée correspond bien a un
parametre que j'ai prevu (ou pas) je fait comment ?
Marsh Posté le 11-11-2004 à 01:24:15
tu utilises argv (liste des paramètres de longueur argv) ou tu utilise un truc comme getopt ou libpopt si tu as ça de disponible
Marsh Posté le 11-11-2004 à 01:25:00
Tu te débrouilles avec argv qui contient les valeur des arguments et argc qui contient le nombre des arguments. Attention la valeur contenu dans argv[ 0 ] est le nom du programme donc si argc == 1 => aucun parametre n'a été fourni, comme dans l'exemple précédent.
Sinon tu as les options simples posix genre -a (1 tiret 1 caractère alphanumérique simple) celà te permet d'indiquer une liste d'option à reconnaitre et de les traiter simplement par un switch.
Sinon tu as les options longues GNU dans getopt.h
Marsh Posté le 11-11-2004 à 01:28:21
Code :
|
Edit : pourquoi quand je veux dire qqchose, y'a 10 personnes qui le disent avant moi ?
Marsh Posté le 11-11-2004 à 13:25:59
y a une librairie qui gere ca tte seule (libarg ou qqc comme ca)
Marsh Posté le 11-11-2004 à 14:19:02
Bon, comme j'ai pas envie de polluer le topic de C avec un nouveau sujet,
je vais continuer ici.
J'ai un problem d'allocation memoire avec malloc :
Code :
|
Pour l'instant elle ne renvoi rien ma fonction, le souci n'est pas là.
Et le compilo me dit que il faut que j'utilise un "cast" explicite
Sous MSVC++ 6 j'ai le message suivant :
============================================================================================================
../Projet.cpp(190) : error C2440: '=' : cannot convert from 'unsigned char' to 'unsigned char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
Projet.obj - 1 error(s), 0 warning(s)
============================================================================================================
Marsh Posté le 11-11-2004 à 14:20:39
Code :
|
cherche donc l'erreur tout seul
Marsh Posté le 11-11-2004 à 14:23:01
Il me dit ca :
190) : error C2440: '=' : cannot convert from 'void *' to 'unsigned char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Marsh Posté le 11-11-2004 à 14:23:34
bin y'a tout qui est un peu foutraque
Code :
|
ton cast sert a rien, mais si tu tiens vraiment a faire un cast alors cast en "unsigned char *" et pas "unsigned char"
ensuite, pourquoi 60 ?
Marsh Posté le 11-11-2004 à 14:27:01
et oui suis je bete puisque malloc renvoi un pointeur ... desole.
Marsh Posté le 11-11-2004 à 14:29:13
# if((carray = (unsigned char)malloc(taille * sizeof(unsigned char))) == NULL){
#
# printf("Allocation demandee impossible !" );
#
# }
#
# else{
# for(c=0;c<60;c++){
# carray[c]=0;
# }
# }
on comment prendre une page pour écrire
carray = calloc(taille, 1);
Marsh Posté le 11-11-2004 à 17:53:24
Merci Taz
Bon maintenant j'ai un autre mini-souci
J'ai donc ma fonction suivante :
Code :
|
Comme vous l'aurez compris c'est pour mettre le tableau dans un fichier.
Bon quand j'ouvre ce fichier avec notepad ou wordpad j'obtient :
#define exemple37x12_width 37
#define exemple37x12_height 12
static unsigned char image_bits1[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x84,
0xc4, 0x03, 0x44, 0x84, 0x60, 0x26, 0x04, 0x44, 0x84, 0xa0, 0x25,
0x7c, 0x48, 0x20, 0xe4, 0x07, 0x84, 0x48, 0x20, 0x24, 0x04, 0x84,
0x20, 0x24, 0x04, 0x84, 0x30, 0x20, 0x24, 0x04, 0x7c, 0x30, 0x20,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
Alors qu'il me faudrait la derniere ligne :
.........................................................., 0x00};
Le probleme c'est que j'ai ce putain de "carré" à la fin, j'ai beau mettre
la sequence d'echappement \b il n'y a rien a faire, pourtant il parait
que fprintf et printf ont exactement les meme seq d'echappements.
Marsh Posté le 11-11-2004 à 19:14:30
Pourquoi tu crees pas un nouveau sujet plutot que d'allonger ?
Marsh Posté le 11-11-2004 à 19:20:57
c'est quoi c'est \b ?
quand tu fous \n tu t'attend bien à un \n ?
ben pareil pour \b
Marsh Posté le 11-11-2004 à 21:06:05
fafounet ===> oué je sais cété dans le but de pas poluer le topic C avec des Chronoklazm partout mais maintenant j'arrete c'est promis
Taz ========> et bein NON ya rien a faire \n il capte et \b que dalle, c'est ptet ce foutu MSVC++ qui pige rien ou ptet meme moi
Marsh Posté le 11-11-2004 à 21:14:18
Hmm faudrait peut etre avoir un minimum de competences avant de dire du mal de MSVC++...
C'est quoi pour toi, le caractere \b ?
Marsh Posté le 11-11-2004 à 21:17:37
Bon ca va je plaisentais.
backspace
Pourquoi cette question ?
Marsh Posté le 11-11-2004 à 21:27:38
C'est \b
Bein c'est le retour d'un caractère en arrière, non ?
Marsh Posté le 11-11-2004 à 21:28:19
Le carre a la fin de ton fichier, c'est justement le caractere backspace.
Marsh Posté le 11-11-2004 à 21:29:19
Chronoklazm a écrit : C'est \b |
Et non
C'est vrai dans une console, mais dans un fichier... ca n'est rien de plus qu'un malheureux octet qui a pour valeur ASCII 08...
Marsh Posté le 11-11-2004 à 21:29:50
je crois que y en a qui ont du mal à comprendre le concept de caractère et le rôle de fprintf ...
Marsh Posté le 11-11-2004 à 21:32:50
Mais pourtant fprintf et printf emploient les mêmes formatages ??!!
fprintf() envoie une sortie formatée vers un fichier.
C'est quoi ce delire ? \n marche et \b marche pas
Marsh Posté le 11-11-2004 à 21:36:00
Code :
|
Ouvre test.txt avec un editeur hexa, et tu verras ca :
08 08 08 08
Ouvre test.txt avec un editeur de texte, et tu verras quatre carres.
Tu peux refaire la meme experience en remplacant \b par \n.
Marsh Posté le 11-11-2004 à 21:40:22
c'est bon a savoir ca, t'as une idée de comment je pourrais faire ? A part intercepter le cas ou j'ecris le dernier caractere ?
Marsh Posté le 11-11-2004 à 21:44:32
Chronoklazm a écrit : c'est bon a savoir ca, t'as une idée de comment je pourrais faire ? A part intercepter le cas ou j'ecris le dernier caractere ? |
Mais c'est justement ca qu'il faut faire!
Marsh Posté le 11-11-2004 à 22:03:11
En gros tu veux virer la dernière virgule dans la déclaration de tableau que tu génères ?
Eh bien elle est tout à fait autorisée dans la syntaxe du C, justement pour faciliter ce type de génération...
Marsh Posté le 11-11-2004 à 22:47:20
Ho, du coup j'ai pas a reecire ma boucle for, j'aime le C, merci blurk !
Marsh Posté le 11-11-2004 à 00:36:13
Voilà, j'aimerais faire en sorte que mon prog c, une fois compilé puisse
"réagir" si il est lancé avec des parametres :
Exemple :
mon.exe (lancé tout seul) => "Aucun parametre !"
mon.exe -a (donc 1 parametre) => "Le parametre est a"
Une aide serai la bienvenue
Message édité par Chronoklazm le 11-11-2004 à 18:18:16