打印字符串的所有字符(包括转义序列)

时间:2019-03-15 18:07:31

标签: c text printing character

我想打印存储在包含转义序列的字符串中的所有字符。

我知道打印转义序列只会打印空白,因此我进行了一些修改,首先检查字符是否是特定的转义序列,然后打印'\\ escape sequence',以便可以对其进行可视化显示。

下面是我的C代码和输出的一部分,它们在linux gcc环境中运行。

我发现我的代码可以打印'\ n',但是与​​下面的输出(不进行转义序列检查)比较,我不知道有什么丢失。

该文本文件是在Windows中创建的,因此我假定该行的每一行都存在字符'\ r \ n',但是'\ r'似乎不存在。

我想念什么?

char c;
while ((c = fgetc(fp)) != EOF) {
    if (c == '\n') { printf("\\n\n"); }
    else if (c == '\r') { printf("\\r\n"); }
    else if (c == '\0') { printf("null\n"); }
    else { printf("%c\n", c); }
}
printf("\n----------------\n");
fseek(fp, 0, SEEK_SET);
while ((c = fgetc(fp)) != EOF) {
    printf("%c\n", c);
}

文本文件的内容:

1

2

空白

空白

3

4

输出结果:

Output result

要求输出结果[CoffeeTableEspresso]:

Output result <CoffeeTableEspresso> asked for

3 个答案:

答案 0 :(得分:3)

如果以文本模式打开它,它将把start-process "[SOME APP].exe" -FilePath "\DIRECTORY\PATH\WHERE\APP\IS\LOCATED]" -Credential (Get-Credential -Credential "DOMAIN\USERID") 视为\r\n,这就是为什么在任何地方都看不到\n的原因。如果要查看\r,请尝试以二进制模式打开它。并执行相同的操作,与在文本模式下打开文件不同,您应该同时看到\r\r

编辑:

以文本模式打开以供阅读:\n

以二进制模式打开以供读取:fopen(filename, "r")

答案 1 :(得分:-1)

使用ascii标志检查转义序列字符,因为每个字符都有与之关联的ascii值。 据我所知,对于Windows,\ r \ n被合并为\ n

答案 2 :(得分:-1)

代码:

#include <string.h>
#include <stdio.h>

int main () {
    FILE *fp = fopen("text.txt","r");
    char c;

    while ((c = fgetc(fp)) != EOF) {
        if (c == '\n') { printf("\\n\n"); }
        else if (c == '\r') { printf("\\r\n"); }
        else if (c == '\0') { printf("null\n"); }
        else { printf("%c\n", c); }
    }
    printf("\n----------------\n");
    fseek(fp, 0, SEEK_SET);
    while ((c = fgetc(fp)) != EOF) {
        printf("%c\n", c);
    }

    fclose(fp);
    return(0);
}

file.txt

HELLO
BYE

输出:

H
E
L
L
O
\n
B
E
Y
\n

----------------
H
E
L
L
O


B
E
Y

我正在使用macOS。我不确定,但这是您想要的行为吗?