我想打印存储在包含转义序列的字符串中的所有字符。
我知道打印转义序列只会打印空白,因此我进行了一些修改,首先检查字符是否是特定的转义序列,然后打印'\\ 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
输出结果:
要求输出结果[CoffeeTableEspresso]:
答案 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。我不确定,但这是您想要的行为吗?