bonjour,
J'aimerais créé une fonction qui permet de remplacer tous les caractère non imprimable par des espaces dans une chaine de caractère passer en paramètre.
Mais comment savoir si un caractère n'est pas imprimable?
Merci.
Version imprimable
bonjour,
J'aimerais créé une fonction qui permet de remplacer tous les caractère non imprimable par des espaces dans une chaine de caractère passer en paramètre.
Mais comment savoir si un caractère n'est pas imprimable?
Merci.
isprint() :question:
Merci.
J'ai réalisé cette fonction mais ça me met l'erreur suivante:Code:
1
2
3
4
5
6
7
8
9 int k; for(k=0;k<strlen(chaine);k++) { if(!isprint((int) chaine[k])) { chaine[k]=" "; } }
"1219 C:\Documents and Settings\Administrateur\Bureau\dev c\MEFEQsansbuf_v3.c [Warning] assignment makes integer from pointer without a cast "
pourtant je caste bien ma chaine en int 8O
edit: non c'est bon trouvé :yaisse2:
merciCode:
1
2
3
4
5
6
7
8
9 int k; for(k=0;k<strlen(chaine);k++) { if(!isprint((int) chaine[k])) { chaine[k]=' '; } }
chaine[k]=' ' vs chaine[k]=" " (Edit: corrigé depuis)
Et ce n'est pas en int qu'il faut caster mais en unsigned char (qui sera implicitement promu en int), sinon ça ne sert à rien.
Merci.
Comment je pourrais tester si ma fonction fonctionne bien?
comment représenté mon caractère non imprimable?
En ASCII, certaines valeurs entre 0 et 31, plus 127 (DEL).
http://ascii-table.com/img/table.gif
En C, on utilise cette notation :
"\0"
"\37"
etc.
37 est la valeur en octal de 31 : 0x1F, soit 0001 1111 soit 011 111, c'est à dire 37 en octal.
OK, je l'avais oublié, merci...
Oui, mais ça ne fonctionne pas en C directement. '^X' n'est pas control-X.Citation:
Une autre notation (pour l'ASCII) est la notation "control-X" ou "CTRL-X" ou "^X" qui designe le caractere de code 64 de moins ou de plus que le code de X (^@ est NUL, ^[ est ESC, ^? est DEL).
Code:
1
2
3
4
5
6
7
8
9
10 #include <stdio.h> int main (void) { printf ("%d\n", '^C'); /* 3 */ printf ("%d\n", '^['); /* 27 (ESC) */ return 0; }
Par contre, on peut faire ceci :Code:
1
2
3
4
5
6 24131 24155 Process returned 0 (0x0) execution time : 0.014 s Press any key to continue.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <stdio.h> /* ASCII */ #define CTRL(a) ((a) & 0x1F) int main (void) { printf ("%d\n", CTRL ('C')); /* 3 */ printf ("%d\n", CTRL ('[') ; /* 27 (ESC) */ return 0; }
Code:
1
2
3
4
5
6 3 27 Process returned 0 (0x0) execution time : 0.055 s Press any key to continue.