C Linux中的^X是什么?

C Linux中的^X是什么?,c,character,output,cat,C,Character,Output,Cat,对于我的家庭作业,我必须确保我的输出与解决方案输出100%匹配,否则我得不到学分 我的输出是: hw05-data-10.txt:最小值=5,最大值=90,平均值=51.23,方差=618.34 解决方案输出为: hw05-data-10.txt:最小值=5,最大值=90,平均值=51.23,方差=618.34 它们看起来很相似,但是当我使用diff mine.txt solution.txt时,我得到了一个不同的结果 我使用了cat-tev mine.txt和cat-tev solution.

对于我的家庭作业,我必须确保我的输出与解决方案输出100%匹配,否则我得不到学分

我的输出是:

hw05-data-10.txt:最小值=5,最大值=90,平均值=51.23,方差=618.34

解决方案输出为:

hw05-data-10.txt:最小值=5,最大值=90,平均值=51.23,方差=618.34

它们看起来很相似,但是当我使用diff mine.txt solution.txt时,我得到了一个不同的结果

我使用了
cat-tev mine.txt
cat-tev solution.txt
来找出差异,我发现我的看起来像:

hw05-data-10.txt^X:min=5,max=90,平均值=51.23,方差=618.34$

解决方案如下所示:

hw05-data-10.txt:最小值=5,最大值=90,平均值=51.23,方差=618.34$


什么是
^X
?我试着四处看看,但找不到答案。如何将其从输出中删除?这是一个C程序。

根据
cat
命令的手册页

-v标志:显示非打印字符,使其可见。对于Control-X,控制字符打印为
^X
;删除字符(八进制0177)打印为
^?
。非ASCII字符(高位设置)打印为
M-
(对于meta),后跟低位7位的字符

-e标志:显示非打印字符(请参见-v选项),并在每行末尾显示一个美元符号(`$')

因此,
^X
的答案是a。要从输出中删除,请尽可能从
cat
命令中删除
-v
-e
标志。如果不能,您必须调查您的C程序:为什么它会生成此控制字符。

^X
是CTRL-X字符,通过
cat
-v
标志可见

如果您想摆脱它,可以通过以下方式传递内容:

tr -d '[:cntrl:]'
有关示例,请参见以下文字记录(使用CTRL-VCTRL-X将
^X
插入
bash
):


如果您想在源代码处删除它,而不是在事件发生后进行过滤,则需要调查创建
mine.txt
文件的程序。它将是插入流氓字符的字符。

^X
是ASCII CAN,取消控制字符。通常,linux tty驱动程序在输出时不使用它,因此在输出到终端时,您将看不到它。如果在输入时使用它,linux tty驱动程序将把它解释为
STOP
字符,并将向前台进程发送
SIGSTOP
信号,使其停止执行,直到收到
SIGSTART
信号。您提到的字符可能在某种程度上插入了用于printf(3)调用的格式字符串中。(您尚未在问题中显示代码段)


在某些窗口环境中,
^X
字符也用于剪切所选文本,因此您可能将其插入程序源代码中不需要的位置

即使在删除-v标志时,它仍会打印与^X相同的输出。运行程序后,它不会显示^X,即使我使用cat mine.txt,它也不会显示^X。但是,当我在vim中打开mine.txt时,它会显示^X。我很困惑。进一步查看手册页,
-e
标志还指示
cat
命令显示非打印字符。使用命令
man cat
了解更多信息。很可能(看到实际代码后)输出缓冲区中有一些垃圾,可能在文件名字段中。将字段预先设置为所有“\0”将消除垃圾。@Hazim,
^X
是由您的C程序生成的。您必须查看该程序的源代码,以了解它为什么在输出中生成它。您尚未发布代码,因此无法提供更多帮助-cat(1)的v选项仅用于查看(诊断问题,而不是修复)您的输出与教师的输出之间的差异。您必须编辑源文件并从正在调用的输出例程中删除该控制字符。检查创建输出的程序为什么写入控制字符并在源代码处将其删除不是更好吗?没有看到您的C程序,或者它如何生成(重新格式化输入数据?)没有人能够告诉您如何修复它。由于问题是由C程序引起的,因此如果将其编辑为C编程问题而不是操作系统问题(不要忘记更新标记),这会更好。
pax> echo '123^X456' | cat -v
123^X456

pax> echo '123^X456' | tr -d '[:cntrl:]' | cat -v
123456