I / O重定向

时间:2018-01-18 09:35:27

标签: c windows redirect ascii

#include<stdio.h>
#include<stdlib.h>

int main()
{
   int i;
   for(i=1; i<=255; i++)
   {
       printf("%d %c\n",i,i);
   }
}

嘿,我正在从i / o重定向中解决问题,而且我在命令提示符下输出ascii表时遇到了困难。

C:\New folder\practice> main.exe > temp.txt

C:\New folder\practice> type temp.txt

并且在按下Enter后(在类型temp.txt之后)它只输出前26个数字。我的问题是为什么?

也有人可以解释我如何使用重定向将代码复制到文本文件中我知道如何使用FILE I / O.

2 个答案:

答案 0 :(得分:6)

因为您正在使用MS-DOS ... MS MS WinDOS,并且ASCII号码为26 / ^ Z是文本结束文件标记。

该功能的存在使得环境与20世纪70年代早期的CP/M operating system兼容,以防您需要使用源自该文件的某些文件。正如您所注意到的那样,只有type才会起作用,但more会显示更多......(没有双关语)。

不开玩笑。

答案 1 :(得分:2)

text 流中写入非ASCII字符非常危险。 0x10\n,可以更改为基础系统行尾,在Windows上为\r\n

正确的方法是以二进制模式打开文件:

#include<stdio.h>
#include<stdlib.h>

int main()
{
   int i;
   FILE *fd = fopen("temp.txt", "wb");
   if (NULL == fd) {
      perror("Error opening file");
      return 1;
   }
   for(i=1; i<=255; i++)
   {
       fprintf(fd, "%d %c\n",i,i);
   }
   fclose(fd);
   return 0;
}

话虽这么说,期望文本文件的命令在读取 SUB 控制字符( Ctrl Z 代码0x1A)时可能会停止,这是你当前的问题......