̾??
unvis
, strunvis
—
?????饯???β???ɽ???Υǥ?????
Standard C Library (libc, -lc)
<vis.h>
int
unvis
(char
*cp, int c, int *astate,
int flag) int
strunvis
(char *dst,
const char *src)
unvis
() ??????
strunvis
() ?ؿ??ϡ??㤨??
vis(3)
?ؿ??ˤ??äƺ???
?Ф??줿?褦?ʥ????饯???β???ɽ?????ǥ????ɤ??Ƹ??η????ᤷ?ޤ???
unvis?? c
?ˤ???Ϣ³???륭???饯???ȤȤ???ͭ???ʥ???????ǧ?????????ޤǸƤ?
?Ф??졢???줬ǧ?????????ȥǥ????ɤ??줿?????饯????
cp
?ˤ??äƻؤ????륭???饯???ΤȤ??????֤????ޤ???
strunvis?ϡ? src
?ˤ????ؤ????륭???饯???? dst
?ˤ????ؤ??????Хåե??إǥ????ɤ??ޤ???
strunvis
()
?ؿ??ϡ??????????ץ????????ǥ????ɤ??ʤ???ñ??
src ?? dst
?إ??ԡ????? dst
???֤??줿?????饯???ο????֤??????ޤ???̵????
?????????ץ??????????Ф??줿?????ˤ? -1
???֤??ޤ??? dst ?Υ??????ϡ?
src
?Υ??????????????ʤ????Фʤ??ޤ???
(???ʤ??????ǥ????????ˤϳ?ĥ??
???????ޤ???)??
unvis
()
?ؿ??ϡ?Ǥ?դΥХ??ȥ??ȥ?????ǥ????ɤǤ??륹?ơ??ȥޥ?????
?????ץ??????Ȥ??Ƥ??ޤ????ǥ????ɤ????뤽?ΥХ??Ȥ??տ魯?뤹?٤Ƥ?
???ơ??Ȥϡ? unvis
()
?ؿ??γ?????¸?????ޤ?????
(???ʤ????????ơ??Ȥؤ?
?ݥ????Ϥ????ޤ?????)???ۤʤ륹?ȥ?????ǥ????ɤ????ƤӽФ?????ͳ??
???ߤ??뤳?Ȥ??Ǥ??ޤ????Х??ȥ??ȥ???Υǥ????ɤϤ????ˤϡ??ޤ?
???????˽????????ޤ????????????ؤΥݥ??????ӥǥ??????襭???饯??
?ؤΥݥ??ȤȤ???Ϣ³?????Х??ȤΤ??줾????
unvis
() ???ƤӽФ??ޤ???
unvis
()
?ؿ??ϡ?Ŭ?ڤ˼谷???ͤФʤ??ʤ??????Ĥ??Υ?????ɤ?
???äƤ??ޤ??????????ϼ????̤??Ǥ?:
0
(????)
- ?????饯?????⤦????ɬ?פǤ??ꡢ?ޤ?????ǧ???????Ƥ??ޤ?????
UNVIS_VALID
- ͭ???ʥ????饯????ǧ?????졢cp
?ˤ??äƻؤ????????????֤????Ƥ??ޤ???
UNVIS_VALIDPUSH
- ͭ???ʥ????饯????ǧ?????졢cp
?ˤ??äƻؤ???????????
?֤????Ƥ??ޤ????????????????Ϥ????Ƥ??뤽?Υ????饯?????⤦?????Ϥ?
ɬ?פ??????ޤ???
UNVIS_NOCHAR
- ͭ???ʥ??????????Ф??줿?????????饯????
?????????Ƥ??ޤ????Υ?????ɤϡ??????饯???δ֤?????Ū???ڤ???
??????????ɬ?פǤ???
UNVIS_SYNBAD
- ̵???ʥ????????ץ??????????Ф??줿?????ޤ???
?ǥ????????????Υ??ơ??Ȥˤ????ޤ????ǥ??????ϥ??????Ȼ??Υ??ơ??Ȥ?
?֤????ޤ???
???ȥ???Τ??٤ƤΥХ??Ȥ????????줿?Ȥ???
flag ?? UNVIS_END
?????ꤷ?Ƥ⤦????
unvis
()
???ƤӽФ??ƻĤäƤ??륭???饯????
???Ф??ޤ?
(?Ϥ??줿?????饯????̵?뤵???ޤ?)??
???Τ褦????ʬŪ?????ɤϡ?
unvis
()
??Ŭ?ڤʻ???ˡ???Ƥ??ޤ???
int state = 0;
char out;
while ((ch = getchar()) != EOF) {
again:
switch(unvis(&out, ch, &state, 0)) {
case 0:
case UNVIS_NOCHAR:
break;
case UNVIS_VALID:
(void) putchar(out);
break;
case UNVIS_VALIDPUSH:
(void) putchar(out);
goto again;
case UNVIS_SYNBAD:
(void)fprintf(stderr, "bad sequence!\n");
exit(1);
}
}
if (unvis(&out, (char)0, &state, UNVIS_END) == UNVIS_VALID)
(void) putchar(out);
unvis
() ?ؿ??ϡ?
4.4BSD
?ǤϤ??????о줷?ޤ?????