Bonjour à tous !
Je suis en train de découvrir Windows 11 (après Windows 7, ça change !) ainsi que le nouveau Visual C++, dont je n'utilise que C, en fait.
J'ai un programme qui modifie le contenu d'un fichier. Il marchait bien avant, avec l'ancien (très ancien) Visual C++ que j'utilisais sous Windows 7, mais ça, c'était avant. J'ai constaté que le nouveau Visual C++ était beaucoup plus strict que l'ancien et j'ai donc dû modifier mes programmes. Le programme dont il est question est censé modifier le contenu de certains bytes d'un fichier déjà existant. Pour faciliter la compréhension, j'ai créé un minuscule programme pour montrer le problème.
Je pars de ce programme :
#include <iostream>
FILE* a;
int main()
{
fopen_s(&a, "aa.txt", "wb");
char t = 1;
for (int h = 0; h < 10; h++) fwrite(&t, 1, 1, a);
fclose(a);
}
Après exécution, j'obtiens un fichier de longueur 10 bytes :
adresses 0 1 2 3 4 5 6 7 8 9 a b c d e f
0000(0000) 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
Ensuite, je crée un autre programme, tout aussi microscopique :
#include <iostream>
FILE* a;
int main()
{
fopen_s(&a, "aa.txt", "a+b");
fseek(a, 0, SEEK_SET);
char t = 2;
for (int h = 0; h < 10; h++) fwrite(&t, 1, 1, a);
fclose(a);
}
Ce programme a pour but de remplacer les 1 par des 2. Mais le contenu du fichier est devenu :
adresses 0 1 2 3 4 5 6 7 8 9 a b c d e f
0000(0000) 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
0016(0010) 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0
Et le fichier a pour longueur 20
Ma question est : Qu'ai-je mal fait ?
Partager