Redirection d’E / S

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

Hé je suis en train de me sortir de la redirection E / S, et je me suis retrouvé coincé dans la sortie de la table ascii à partir de l’invite de commande je l’ai fait.

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

et après avoir temp.txt sur enter (après le type temp.txt ), il ne produit que les 26 premiers numéros. Ma question est pourquoi?

En outre, quelqu’un peut-il m’expliquer comment copier le code dans un fichier texte en utilisant la redirection que je sais faire en utilisant les E / S FILE.

Parce que vous utilisez MS-DOS … er MS WinDOS, et que le numéro ASCII 26 / ^ Z est la marque de fin de fichier texte.

La fonctionnalité existe pour que l’environnement soit compatible avec le système d’exploitation CP / M du début des années 70, au cas où vous auriez besoin d’utiliser des fichiers qui en sont issus. Comme vous l’avez remarqué, seul le type fonctionne comme ça, mais d’ more afficheraient plus … (sans jeu de mots).

Sans blague.

Il est très dangereux d’écrire des caractères non ASCII dans un stream de texte . 0x10 est \n et peut être changé dans la fin de ligne système sous-jacente qui est \r\n sous Windows.

La manière correcte est d’ouvrir un fichier en mode binary:

 #include #include 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; } 

Cela étant dit, les commandes qui attendent des fichiers texte peuvent s'arrêter lorsqu'elles lisent un caractère de contrôle SUB ( Ctrl Z code 0x1A), ce qui est votre problème actuel ...