当我使用以下代码时:
#include <stdio.h>
int main(void)
{
printf("%s","Hello world\nHello world");
return 0;
}
它打印为:
Hello world
Hello world
如何防止这种情况并将其打印为C中的原始字符串文字?我的意思是应该按如下所示在终端窗口中显示它:
Hello world\nHello world
我知道我可以通过对printf使用反斜杠来实现此目的,但是还有其他C函数或方法可以不反斜杠吗?读取文件时会很有帮助。
没有内置的机制可以做到这一点。您必须手动执行每个字符。但是,中的功能ctype.h
可能会有所帮助。具体来说,在“ C”语言环境中,对于基本执行字符集中的isprint
所有图形字符,该功能均保证为true ,这实际上与7位ASCII中的所有图形字符相同,外加空格;并且保证不是所有7位ASCII控制字符都为true ,包括制表符,回车符等。
这是一个草图:
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
int main(void)
{
int x;
setlocale(LC_ALL, "C"); // (1)
while ((x = getchar()) != EOF)
{
unsigned int c = (unsigned int)(unsigned char)x; // (2)
if (isprint(c) && c != '\\')
putchar(c);
else
printf("\\x%02x", c);
}
return 0;
}
这不逃'
也不是"
,但它确实逃逸\
,这是简单的扩展,如果你需要它。
\n
练习时保留U + 000A,\r
U + 000D等的打印。练习还需要处理基本执行字符集之外的字符(例如U + 0080至U + 10FFFF的UTF-8编码)。
该程序包含完全符合标准的C库不需要的两件事,但以我的经验,在真正的操作系统上是必需的。它们用(1)
和标记(2)
。
1)这明确地将它的“区域”的配置方式应该到默认设置。
2)从返回的值getchar
是int
。它被认为是无论是在范围表示的一个数通过unsigned char
(通常0-255含),或特殊值EOF
(这是不范围表示的通过unsigned char
)。但是,已知错误的C库为设置了最高位的字符返回负数。如果发生这种情况,printf
例如,将\xffffffa1
在应打印时打印\xa1
。投射x
到unsigned char
然后再返回以unsigned int
更正此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句