如果我有char* s
并且我用printf打印它,就像这样:
printf("%s\n", s);
如何强制printf
打印不可打印的字符(问题以外的其他内容,我认为是默认值)?就像使用ls --literal
一样,它是如何做的呢?
我知道isprint()
但我不知道从那里去哪里。
答案 0 :(得分:1)
作为从前面的评论中收集选项的简短示例,您可以使用不包含ctype.h
的简单循环,也可以使用isprint()
检查返回:
#include <stdio.h>
#include <ctype.h>
int main (void) {
char s[] = "some string w/non-printables";
char *p = s;
char sub = '*';
/* without including <ctype.h> */
for (; *p; p++)
if (*p < ' ' || *p > '~')
*p = sub;
p = s;
/* including <ctype.h> */
for (; *p; p++)
if (isprint(*p) == 0)
*p = sub;
printf ("%s\n", s);
return 0;
}
如果遇到不可打印的字符,它只会替换星号'*'
。
注意: printf
能够正确打印字符串中的多字节字符,如果LOCALE
和字符集已正确设置且您正在使用的字体集包括请求的字符。如果您使用的是Windows,由于所使用的终端和字符集的变化范围更广,这将变得更加困难。您可以通过打印printf ("It is 25° outside.\n");
轻松检查,如果您的终端和字体设置如上所述,尽管'°'
是一个多字节字符,仍会正确打印。